投票python脚本_刷票Python脚本教程
在这个阶段,在朋友圈⾥举⾏的投票活动是⽆⽌境的,我相信很多学⽣都为此感到困扰,因为总会有个⼈(亲戚,朋友或其他)不时要求你帮助TA投票。本⽂不打算从道德或情感层⾯探讨这个问题。我感兴趣的是,⽬前⼤多数投票活动实际上都是明显的漏洞,“刷票”可以通过简单的技术⼿段实现。
第⼀步是弄清楚具体的投票过程和可能的限制。 经过研究,总结如下: 投票需要登录 注册帐户需要验证电⼦邮件地址 登录不需要验证码每个账户每天可以投票⼀次,投票数可以选择,从0到10 投票不需要验证码 请注意红字,是的,这是最关键的地⽅。
这语⾔必须是我喜欢的Python。 在⼯具的情况下,我实际上之前做过模拟登录。简单地说,我使⽤了⼀个模拟浏览器的Python插件,然后执⾏各种模拟⽤户操作,例如单击按钮并输⼊信息。 2,但这种类型的插件有两个主要问题: 很⼩的⽆头 基本上,HTML页⾯的操作只能应⽤于表单。 什么是⽆头的它可以简单地理解为后台操作。如果你不能做⽆头,你仍然需要在运⾏时打开浏览器,但脚本将操作浏览器。 所以我们可以看到,如果你不能做⽆头,它看起来不是很低端(想象⼀下电脑屏幕上的浏览器,然后⾃动输⼊东西,你只能坐在任何东西上,什么也做不了) ,并且使⽤起来⾮常不⽅便,例如没有图形界⾯的系统。 4,什么只能应⽤于表单,我们采取jQuery来⽐较它。jQuery可以从HTML中出现的所有内容中进⾏选择,但只应⽤于表单意味着您只能操作表单,⽽您⽆法对其他元素做任何事情。我不知道为什么会这样。可能是对底层插件有⼀些限制。⽆论如何,⼤多数插件只能操纵表单。
Ghost.py⽀持⽆头并且可以操纵所有元素,甚⾄运⾏js,你知道它有多强⼤。唯⼀的缺点是依靠PyQt或PySide,你知道这两个项⽬,你会折磨死者。因此,如果您不想折腾,请不要再使⽤它。 Splinter半⽀持⽆头 splinter默认不⽀持headless,但在使⽤zope插件的前提下可以⽆头,因为我使⽤默认,所以如何做⽆头没有研究,有兴趣⾃⼰动⼿做我们开始做吧。但是,估计80%不强。 。 。 Splinter也⾮常强⼤,可以处理所有元素。 Mechanize⽀持⽆头但只能操作形式
重复我们的想法: 登录投票 因为我决定采⽤⽆头解决⽅案,所以我使⽤机械化。 如果您登录,则没有问题。登录框最初是⼀个表单。投票。 。 。先⾛吧!我们⾸先登录。 直接在代码上: 复制代码 #coding: utf-8 导⼊cookielib 导⼊机械化 导⼊urllib
Br=mechanize.Browser() Cj=cookielib.LWPCookieJar() Br.set_cookiejar(CJ) Br.open() Br.select_form(NR=0) Br.form [mail]= Br.form [password]=xxxxxxx Br.submit() 复制代码 Cookielib⽤于操纵cookie。因为我们需要在登录后跳转到投票页⾯,如果我们不保留cookie,那么⽹站会将我们视为未登录别忘了,你正在使⽤代码来模拟登录,所以不要以为他会⾃动给你保存cookie。 代码很简单,我不解释。简⽽⾔之,打开页⾯输⼊⽤户名和密码提交 您可以输出结果以查看: .....同上...... Response=br.submit() 打印
点。如何投票。 ⾸先指定投票操作: 从下拉列表中选择“10”,然后单击“确定”。 我们已经知道机械化只能操纵形式,它对其他元素⽆能为⼒,所以我们⽆法直接模拟⼈类操作。 那该怎么办 让我们先考虑5秒。 。 。 。 。 。 。 。 好的,我知道你拒绝了。 那个时候我想了很久! ! ! 我们可以改变主意,投票,表⾯上是⼈⼯操作,但发送到服务器的最终消息实际上是⼀个POST请求!所以,我们可以跳过模拟并直接发送请求! 好的,这是⼀个明确的想法。让我们从开始吧我们POST什么 投票,告诉服务器我们投了票。 但代码是⼀个⾮常严格的事情,如果格式错误,服务器⽆法识别它! 好的,这次不要考虑,直接告诉你答案。 我们先投票⼀次,然后查看POST请求中的数据格式。 我⽤firebug,打开firebug,然后选择投票数,按OK按钮,你可以在firebug中看到这个POST请求的具体信息。 我们可以打开信息,您可以看到数据的格式: Z_data: 10 Id: 99 希德: 78 现在我可以看到它! Z_data是投票数,id是项⽬编号,sid。 。 。好的,我不知道这是什么。简⽽⾔之,写78. 获取数据格式,让我们回到代码并模拟POST请求: 参数={z_data:10, id:99, sid:78 }# POST数据
朗朗简历Data=urllib.urlencode(参数) 响应=br.open(,数据) ⾮常简单 别忘了导⼊urllib! 好的,让我们试验前⾯的代码并看看效果。 发现的投票数确实增加了,我们的⽅法是可⾏的。 然后,让我们改变它,添加⼀个for循环,这样我们就可以⾃动登录所有⽤户并根据我们设置的⽤户名和密码进⾏投票。 基本功能是这样的,但在使⽤它⼏天之后,我发现了⼀个不好的地⽅:如果我想在投票后检查投票,我必须⼿动打开页⾯。如果你能直接显⽰当前的票数,就好了! 所以我们继续这个旅程。
有没有歌词⾸先,这个想法是: 打开项⽬页⾯获得投票数显⽰ 打开我们已经拥有的页⾯,br.open()将会这样做。显⽰也很简单,打印。那你怎么得票呢 介绍⼀种新⼯具 BeautifulSoup,汤! 我承认名字有点。 。 。 。 ⽆论如何,继续我们的编程路径。 汤是⼀个解析HTML的插件,并被介绍。 我们可以⽤汤解析获得的HTML,然后到与我们需要的票数相对应的元素,我们就可以得到票数。 这很简单!我们将HTML放⼊汤中。 。 。 。 我怎么能弄错 ⾕歌很长⼀段时间,原来HTML中有不规则的标签,分析失败了。 微软的⽹页最初并不符合标准。 。 。好的,我⽆法解决,我该怎么办 有⼈给出了⼀个解决⽅案:使⽤lxml。 什么是lxml Lxml是⼀个⽤于解析xml的插件,但它可以解析HTML 和注意⼒,并忽略不受管制的标记。 它恰好是我们需要的! 好的,使⽤官⽅⽂档?移动宽带无线路由器设置
Br=mechanize.Browser() Response=br.open() Page=etree.ad()。lower()。decode(utf-8))
hrefs=page.xpath(uquot; //span [@ class=number n_99]quot;) 打印“当前投票:” + hrefs [0] .text 还是很简单,不解释,看看吧。 好的,所以我们整个刷票脚本完成了~~ 拍下所有代码的照⽚ 复制代码 #coding: utf-8 导⼊cookielib 导⼊机械化 导⼊urllib 来⾃lxml import etree All_data=[[username1,password1],[username2,password2]] 对于all_data:中的i
br=mechanize.Browser() cj=cookielib.LWPCookieJar() br.set_cookiejar(cj) br.open() br.select_form(n
r=0) br.form [mail]=i [0] br.form [password]=i [1] br.submit() response=br.open() parameters={z_data:10, id:99, sid:78 }# POST数据
古代寓言故事data=urllib.urlencode(参数) response=br.open(,数据) printquot;%s已成功投票! %i [0] Br=mechanize.Browser()
Response=br.open() Page=etree.ad()。lower()。decode(utf-8)) hrefs=page.xpath(uquot; //span [@
草原之夜歌词class=number n_99]quot;) 打印“当前投票:” + hrefs [0] .text 复制代码 把它做完。挞皮
发布评论