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中使用模块的教程
Apr 27 Python
python追加元素到列表的方法
Jul 28 Python
Python Nose框架编写测试用例方法
Oct 26 Python
python实现二叉查找树实例代码
Feb 08 Python
详解django自定义中间件处理
Nov 21 Python
dataframe 按条件替换某一列中的值方法
Jan 29 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
Jul 22 Python
python global关键字的用法详解
Sep 05 Python
如何安装2019Pycharm最新版本(详细教程)
Sep 26 Python
利用PyQt中的QThread类实现多线程
Feb 18 Python
python 实现围棋游戏(纯tkinter gui)
Nov 13 Python
python 实现图片批量压缩的示例
Dec 18 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获取表单textarea数据中的换行问题
2010/09/10 PHP
第三章 php操作符与控制结构代码
2011/12/30 PHP
基于php下载文件的详解
2013/06/02 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
2019/04/09 PHP
Firefox 无法获取cssRules 的解决办法
2006/10/11 Javascript
用js遍历 table的脚本
2008/07/23 Javascript
JS+XML 省份和城市之间的联动实现代码
2009/10/14 Javascript
ExtJS 设置级联菜单的默认值
2010/06/13 Javascript
基于JQuery的访问WebService的代码(可访问Java[Xfire])
2010/11/19 Javascript
在JS中如何调用JSP中的变量
2014/01/22 Javascript
JavaScript操作select元素和option的实例代码
2016/01/29 Javascript
实例详解jQuery的无new构建
2016/08/02 Javascript
利用yarn实现一个webpack+react种子
2016/10/25 Javascript
jQuery点击导航栏选中更换样式的实现代码
2017/01/23 Javascript
javascript实现滑动解锁功能
2017/03/22 Javascript
Bootstrap实现的经典栅格布局效果实例【附demo源码】
2017/03/30 Javascript
对Angular中单向数据流的深入理解
2018/03/31 Javascript
r.js来合并压缩css文件的示例
2018/04/26 Javascript
JavaScript实现无限级递归树的示例代码
2019/03/29 Javascript
微信小程序 生成携带参数的二维码
2019/10/23 Javascript
详解Webpack4多页应用打包方案
2020/07/16 Javascript
详解template标签用法(含vue中的用法总结)
2021/01/12 Vue.js
用Python代码来绘制彭罗斯点阵的教程
2015/04/03 Python
Python使用Turtle模块绘制五星红旗代码示例
2017/12/11 Python
Django中间件实现拦截器的方法
2018/06/01 Python
Python3+Pycharm+PyQt5环境搭建步骤图文详解
2019/05/29 Python
Python 的字典(Dict)是如何存储的
2019/07/05 Python
详解Python利用configparser对配置文件进行读写操作
2020/11/03 Python
python 下载文件的多种方法汇总
2020/11/17 Python
html5 利用重力感应实现摇一摇换颜色可用来做抽奖等等
2014/05/07 HTML / CSS
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
党员教师工作决心书
2014/03/13 职场文书
安全宣传标语口号
2014/06/06 职场文书
幼儿园六一儿童节活动总结
2015/02/10 职场文书
小学生一年级(书信作文)
2019/08/13 职场文书
python中的被动信息搜集
2021/04/29 Python