python小程序实现刷票功能详解


Posted in Python onJuly 17, 2019

刷票一般要突破以下限制:

1、验证码识别

2、同一ip不可连续投票

解决办法

1、用tesseract工具,链接在此 https://code.google.com/p/tesseract-ocr/ (人人还是加不了https链接)

2、使用代理,国内可以的代理服务器可以从这里找到 http://cn-proxy.com/

程序语言当然用python

浏览器投票的流程如下

1、向服务器发送请求,服务器返回验证码和表单

2、填好表单,发送到服务器

可以用firefox+httpfox插件查看整个事件过程,以及发送请求的POST和GET数据格式

使用python的urllib2库实现上述过程

1、向服务器请求验证码

可以用

import urllib
urllib.urlretrieve(imgurl,imgfile)#imgurl可以从页面源代码找到

但是由于每次请求服务器,都会重新生成验证码,所以这样请求道的验证码即便识别出来,再POST进去时也会提示错误。解决办法时使用cookie

import cookie
import urllib2
cookiejar=cookielib.MozillaCookieJar(cookieFilename)
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
response=opener.open(imgurl)

如果需要使用代理服务器,则可以这样写

import cookie
import urllib2
proxy_line='127.0.0.1:8087'
cookieFilename='cookie.txt'
cookiejar=cookielib.MozillaCookieJar(cookieFilename)
opener=urllib2.build_opener(urllib2.ProxyHandler({'http':proxy_line}),urllib2.HTTPCookieProcessor(cookieFileJar))
response=opener.open(imgurl,timeout=2)#设置超时时间

这样就是以本机8087端口带有cookie验证访问服务器,下一步识别出验证码,依然带cookie POST进服务器即可。

2、保存验证码到本地

上面response即返回得到的验证码二进制流,写入文件用下面代码

content=response.read()
fp=file(imgfile,'wb')#将二进制图片保存
fp.write(content)
fp.close()

3、验证码识别

验证码识别用tesseract,由于tesseract没有提供python接口,这里用系统调用外部命令

用法为

import os
imgfile='img.jpg'
out

用python刷票代码如下

# -*- coding: utf-8 -*-
 
import os
import urllib
import urllib2
import string
import socks
import httplib2
import cookielib
import time
import random
tes='tesseract.exe'
filepath='./'
imgurl='http://example.com/vote/img.jsp'
myurl="http://example.com/vote"
voteInfoId='xxxxxxxx'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0'}#,
#     'Cookie':'324E661DE12427BD71CE63DF436A80D1'}
imgfile=filepath + '/img.jpg'
outfile=filepath + '/out'
proxy_file=filepath+'/proxy.txt'
user_file=filepath+'/user2.txt'
cookieFilename=filepath +'/cookies.txt'
#myproxy_line='211.142.236.137:80'
#cookieJarFileLWP=cookielib.LWPCookieJar(cookieFilename)
cookieFileJar=cookielib.FileCookieJar(cookieFilename)
#opener=urllib2.build_opener(urllib2.ProxyHandler({'http':myproxy_line}),urllib2.HTTPCookieProcessor(cookieMozillaJar))
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieFileJar))
f_user=open(user_file)
 
f_proxy=open(proxy_file)
proxy_all=f_proxy.read().split('\n')
f_user=open(user_file)
user_all=f_user.read().split('\n')
count=1
cookieFileJar=cookielib.FileCookieJar(cookieFilename)#使用cookie登陆
 
while True:
  i=random.randint(1,100)
  j=random.randint(1,60)
  #print user_all.length()
  user_line=user_all[i]
  myproxy_line=proxy_all[j]
 
  for myproxy_line in [myproxy_line]:#f_proxy:
 
    #使用代理和cookie
    opener=urllib2.build_opener(urllib2.ProxyHandler({'http':myproxy_line}),urllib2.HTTPCookieProcessor(cookieFileJar))
    try:
      response2=opener.open(imgurl,timeout=1)#返回二进制图片
    except Exception,e:
      print 'I can not connect the server,try again'
      continue
 
    content=response2.read()
    fp=file(imgfile,'wb')#将二进制图片保存
    fp.write(content)
    fp.close()
    outcmd="%s %s %s -l eng digits -psm 7" %(tes,imgfile,outfile)
    print 'I begin to recognize the CAPTCHA code ..'
    os.system(outcmd)
    code_file=open(filepath+'/out.txt')
    mycode_line=code_file.readline()
    code_file.close()
 
    if len(mycode_line)<=3:
      print 'I guess the CAPTCHA code is %s,but I think it\'s error.' % (mycode_line)
      continue
    mycode=mycode_line[0:4]
    print 'I guess the CAPTCHA code is %s' % (mycode)
    mylist=user_line.split('----')
    proxy_list=myproxy_line.split(':')
    myid=mylist[0]#.decode('utf-8')
    myname=mylist[1]#.decode('utf-8')
    mycomm=mylist[2]#.decode('utf-8')
    data={'method':'vote',
       'voteInfoId':voteInfoId,
       'forward':'***',
       'info1':myid,
       'info2':myname,
       'info3':mycomm,
       'inputCode':mycode,
       'submit':'确定'}
    print 'Now I begin to vote...'
    print 'the user is %s' % (myid)
    print 'the name is %s' % (myname)
    print 'the comment is %s' % (mycomm)
    post_data=urllib.urlencode(data)
    try:
      response=opener.open(myurl,post_data)
    except Exception,e:
      print 'I can\'t connect the server ,so vote is failure'
      continue
    content=response.read()
  #img_req=opener.open(imgurl)
  #cookieFileJar.save(cookieFilename)
  #req=opener.open(myurl,post_data)
  #req=urllib2.Request(myurl,data=post_data,headers=headers)
    fp=file('test.html','w')
    print 'I put the received html to the file test.html'
    fp.write(content)
    fp.close()
    #outcmd="%s %s %s" %(tes,imgfile,outfile)
  #count+=1
    #print cookieFileJar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python单链表的简单实现方法
Sep 23 Python
Python3多进程 multiprocessing 模块实例详解
Jun 11 Python
对python list 遍历删除的正确方法详解
Jun 29 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
Nov 30 Python
Python中时间datetime的处理与转换用法总结
Feb 18 Python
Python解压 rar、zip、tar文件的方法
Nov 19 Python
Python3+Selenium+Chrome实现自动填写WPS表单
Feb 12 Python
python读取文件指定行内容实例讲解
Mar 02 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
Jun 27 Python
浅析python函数式编程
Sep 26 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
Feb 07 Python
python的netCDF4批量处理NC格式文件的操作方法
Mar 21 Python
python 获取sqlite3数据库的表名和表字段名的实例
Jul 17 #Python
Python math库 ln(x)运算的实现及原理
Jul 17 #Python
Python_查看sqlite3表结构,查询语句的示例代码
Jul 17 #Python
10分钟用python搭建一个超好用的CMDB系统
Jul 17 #Python
在SQLite-Python中实现返回、查询中文字段的方法
Jul 17 #Python
PIL图像处理模块paste方法简单使用详解
Jul 17 #Python
python 实现GUI(图形用户界面)编程详解
Jul 17 #Python
You might like
PHP curl模拟浏览器采集阿里巴巴的实现代码
2011/04/20 PHP
php curl的深入解析
2013/06/02 PHP
php后台如何避免用户直接进入方法实例
2013/10/15 PHP
PHP简单获取视频预览图的方法
2015/03/12 PHP
网页javascript精华代码集
2007/01/24 Javascript
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
Javascript学习笔记5 类和对象
2010/01/11 Javascript
js中onload与onunload的使用示例
2013/08/25 Javascript
javascript实现验证IP地址等相关信息代码
2015/05/10 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
JavaScript实现垂直滚动条效果
2017/01/18 Javascript
TypeScript入门-接口
2017/03/30 Javascript
js设置随机切换背景图片的简单实例
2017/11/12 Javascript
layui点击按钮添加可编辑的一行方法
2018/08/15 Javascript
服务端预渲染之Nuxt(使用篇)
2019/04/08 Javascript
js模拟实现百度搜索
2020/06/28 Javascript
基于JS实现计算24点算法代码实例解析
2020/07/23 Javascript
[01:03:36]Ti4 循环赛第三日DK vs Titan
2014/07/12 DOTA
Python与shell的3种交互方式介绍
2015/04/11 Python
在Django的视图中使用form对象的方法
2015/07/18 Python
Python画图学习入门教程
2016/07/01 Python
python机器学习之神经网络(一)
2017/12/20 Python
基于Python 装饰器装饰类中的方法实例
2018/04/21 Python
对Python3+gdal 读取tiff格式数据的实例讲解
2018/12/04 Python
python 消除 futureWarning问题的解决
2019/12/25 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
2020/03/06 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
2020/06/02 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
2020/06/03 Python
Python中zipfile压缩文件模块的基本使用教程
2020/06/14 Python
python判断元素是否存在的实例方法
2020/09/24 Python
html5拖曳操作 HTML5实现网页元素的拖放操作
2013/01/02 HTML / CSS
程序运行正确, 但退出时却"core dump"了,怎么回事
2014/02/19 面试题
初三家长会邀请函
2014/01/18 职场文书
我们的节日端午节活动总结
2015/02/11 职场文书
2019生态环境保护倡议书!
2019/07/03 职场文书
vue递归实现树形组件
2022/07/15 Vue.js