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 相关文章推荐
ssh批量登录并执行命令的python实现代码
May 25 Python
Python Web开发模板引擎优缺点总结
May 06 Python
寻找网站后台地址的python脚本
Sep 01 Python
基python实现多线程网页爬虫
Sep 06 Python
Python 数据结构之旋转链表
Feb 25 Python
python 字典中文key处理,读取,比较方法
Jul 06 Python
Selenium定时刷新网页的实现代码
Oct 31 Python
django框架model orM使用字典作为参数,保存数据的方法分析
Jun 24 Python
Python hashlib模块加密过程解析
Nov 05 Python
python脚本实现mp4中的音频提取并保存在原目录
Feb 27 Python
Python requests模块session代码实例
Apr 14 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
Feb 25 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 echo 输出字符串函数详解
2010/05/13 PHP
解决jQuery插件tipswindown与hintbox冲突
2010/11/05 Javascript
javascript代码加载优化方法
2011/01/30 Javascript
jquerydom对象的事件隐藏显示和对象数组示例
2013/12/10 Javascript
jquery ajax,ashx,json的用法总结
2014/02/12 Javascript
超棒的响应式布局jQuery插件Freetile.js
2014/11/17 Javascript
javascript 数组操作详解
2015/01/29 Javascript
IE及IE6浏览器中判断JS文件加载成功失败的方法
2015/02/18 Javascript
纯js实现重发验证码按钮倒数功能
2015/04/21 Javascript
JavaScript中几种排序算法的简单实现
2015/07/29 Javascript
javascript原型继承工作原理和实例详解
2016/04/07 Javascript
ie下js不执行的几种可能
2017/02/28 Javascript
Express系列之multer上传的使用
2017/10/27 Javascript
node.js使用zlib模块进行数据压缩和解压操作示例
2020/02/12 Javascript
JS继承实现方法及优缺点详解
2020/09/02 Javascript
Python实现的人工神经网络算法示例【基于反向传播算法】
2017/11/11 Python
pandas or sql计算前后两行数据间的增值方法
2018/04/20 Python
Python实现图片添加文字
2019/11/26 Python
pd.DataFrame统计各列数值多少的实例
2019/12/05 Python
基于python监控程序是否关闭
2020/01/14 Python
python字符串替换re.sub()实例解析
2020/02/09 Python
Python小整数对象池和字符串intern实例解析
2020/03/21 Python
使用jupyter notebook直接打开.md格式的文件
2020/04/10 Python
Python selenium模拟手动操作实现无人值守刷积分功能
2020/05/13 Python
浅谈h5自定义audio(问题及解决)
2016/08/19 HTML / CSS
HomeAway澳大利亚:预订你的度假屋,公寓、度假村、别墅等
2019/02/20 全球购物
人力资源求职信
2014/05/25 职场文书
2014年酒店工作总结与计划
2014/11/17 职场文书
高三复习计划
2015/01/19 职场文书
信贷客户经理岗位职责
2015/04/09 职场文书
企业党员岗位承诺书
2015/04/27 职场文书
检讨书格式范文
2015/05/07 职场文书
健康教育主题班会
2015/08/14 职场文书
Html5新增了哪些功能
2021/04/16 HTML / CSS
Redis IP地址的绑定的实现
2021/05/08 Redis
Apache Hudi集成Spark SQL操作hide表
2022/03/31 Servers