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概率计算器实例分析
Mar 25 Python
Python计时相关操作详解【time,datetime】
May 26 Python
Python assert语句的简单使用示例
Jul 28 Python
Python实现代码统计工具
Sep 19 Python
Python文本处理简单易懂方法解析
Dec 19 Python
python使用正则表达式匹配txt特定字符串(有换行)
Dec 09 Python
python简单实现插入排序实例代码
Dec 16 Python
matplotlib之pyplot模块实现添加子图subplot的使用
Apr 25 Python
python保存图片的四个常用方法
Feb 28 Python
Selenium浏览器自动化如何上传文件
Apr 06 Python
详解OpenCV获取高动态范围(HDR)成像
Apr 29 Python
Django框架中表单的用法
Jun 10 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输入流php://input使用浅析
2014/09/02 PHP
PHP PDOStatement::closeCursor讲解
2019/01/30 PHP
php实现session共享的实例方法
2019/09/19 PHP
javascript 一些用法小结
2009/09/11 Javascript
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
2011/08/28 Javascript
animate动画示例(泪奔的小孩)及stop和delay的使用
2013/05/06 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
2013/05/08 Javascript
教你在heroku云平台上部署Node.js应用
2014/07/30 Javascript
javascript异步编程代码书写规范Promise学习笔记
2015/02/11 Javascript
jquery实现文本框的禁用和启用
2016/12/07 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
vue-resource + json-server模拟数据的方法
2017/11/02 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
微信小程序上传图片功能(附后端代码)
2020/06/19 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
详解微信小程序的 request 封装示例
2018/08/21 Javascript
微信小程序实现自动定位功能
2018/10/31 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
2019/10/31 Javascript
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
使用Pyinstaller的最新踩坑实战记录
2017/11/08 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
2018/07/04 Python
解决pandas中读取中文名称的csv文件报错的问题
2018/07/04 Python
Dlib+OpenCV深度学习人脸识别的方法示例
2019/05/14 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
2019/05/31 Python
Django 反向生成url实例详解
2019/07/30 Python
python实现美团订单推送到测试环境,提供便利操作示例
2019/08/09 Python
python 表格打印代码实例解析
2019/10/12 Python
简单了解Django项目应用创建过程
2020/07/06 Python
详解CSS3 Media Queries中媒体属性的使用
2016/02/29 HTML / CSS
北美Newegg打造的全球尖货海购平台:tt海购
2018/09/28 全球购物
俄罗斯在线大型超市:ТутПросто
2021/01/08 全球购物
生产管理的三大手法
2013/11/11 职场文书
毕业生自荐书
2014/02/03 职场文书
法学自荐信
2014/06/20 职场文书
个人安全生产责任书
2014/07/28 职场文书
先进基层党组织材料
2014/12/25 职场文书