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 相关文章推荐
Pyramid将models.py文件的内容分布到多个文件的方法
Nov 27 Python
玩转python爬虫之爬取糗事百科段子
Feb 17 Python
对变量赋值的理解--Pyton中让两个值互换的实现方法
Nov 29 Python
Python中常用信号signal类型实例
Jan 25 Python
python使用socket创建tcp服务器和客户端
Apr 12 Python
python中的数据结构比较
May 13 Python
Python数据结构与算法(几种排序)小结
Jun 22 Python
详解python中GPU版本的opencv常用方法介绍
Jul 24 Python
Python 如何在字符串中插入变量
Aug 01 Python
Django如何实现密码错误报错提醒
Sep 04 Python
Pycharm的Available Packages为空的解决方法
Sep 18 Python
Python之matplotlib绘制饼图
Apr 13 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的分页功能
2007/03/21 PHP
php的$_FILES的临时储存文件与回收机制实测过程
2013/07/12 PHP
详解PHP实现异步调用的4种方法
2016/03/14 PHP
php使用curl下载指定大小的文件实例代码
2017/09/30 PHP
js模拟滚动条(横向竖向)
2013/02/22 Javascript
一些老手都不一定知道的JavaScript技巧
2014/05/06 Javascript
JS中获取函数调用链所有参数的方法
2015/05/07 Javascript
JavaScript对Cookie进行读写操作实例
2015/07/25 Javascript
使用堆实现Top K算法(JS实现)
2015/12/25 Javascript
javascript点击按钮实现隐藏显示切换效果
2016/02/03 Javascript
JQuery中attr属性和jQuery.data()学习笔记【必看】
2016/05/18 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
2017/09/22 jQuery
使用Vuex实现一个笔记应用的方法
2018/03/13 Javascript
numpy找出array中的最大值,最小值实例
2018/04/03 Python
python多进程提取处理大量文本的关键词方法
2018/06/05 Python
Python从函数参数类型引出元组实例分析
2019/05/28 Python
利用pyuic5将ui文件转换为py文件的方法
2019/06/19 Python
使用python画社交网络图实例代码
2019/07/10 Python
python如何绘制疫情图
2020/09/16 Python
Python Selenium库的基本使用教程
2021/01/04 Python
英国在线花园中心:You Garden
2018/06/03 全球购物
Vrbo英国:预订度假屋
2020/08/19 全球购物
作为网站管理者应当如何防范XSS
2014/08/16 面试题
软件工程专业推荐信
2013/10/28 职场文书
销售实习自我鉴定
2013/12/07 职场文书
社区母亲节活动方案
2014/03/05 职场文书
大学生演讲稿
2014/04/25 职场文书
计算机网络专业求职信
2014/06/05 职场文书
2014党的群众路线教育实践活动总结材料
2014/10/31 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
培训督导岗位职责
2015/04/10 职场文书
捐款通知怎么写
2015/04/24 职场文书
2015年小学体育工作总结
2015/05/22 职场文书
2015国庆节放假通知范文
2015/07/30 职场文书
合作意向书怎么写
2019/06/24 职场文书
Python中zipfile压缩包模块的使用
2021/05/14 Python