朋友圈微信投票很麻烦?python开发个自动化刷票脚本,再也不用头痛了!

本文介绍了如何使用Python编写一个自动化刷票脚本,通过模拟登录网站投票,分析目标网站,构造请求头、表单信息,并建立代理IP池,解决比赛拉票问题。

前言

现在部分比赛为了推广赞助商或者比赛本身,需要参赛队伍进行网上拉票,甚至票数还会占一定比例的成绩。因此,刷票也就应运而生了。此次我们团队参加一个比赛,就需要网上投票决出前几名,作为一位技术人员,当然是得“解决”技术能解决的问题嘛,所以就写了个刷投票插件来刷一刷。

原理
刷票的原理很简单,就是相当于模拟人登录网站去投票,只是把这个过程程序化,让程序代替人到网站去投票。具体一点说把,首先是客户端(我们)发出请求(Request)给服务端(投票网站),跟他们说,我们需要看他们网站的信息,然后服务端就会回复(Respose)我们,我们再把填好的表单发给他们(Request),他们收到后就会回复我们(Respose)。

主要内容
分析网站

表单提交

构造代理IP池

  1. 分析网站

由于每个网站需要提交的信息都不一样,那么首先我们需要对目标网站进行相对应的分析,找出他们的表单接口(也就是URL或者叫网址)以及我们需要提交的信息。

1.1 收集信息

使用F12,打开审核元素,点击Network,真实地进行一次表单提交

框住的两个内容就是我们需要知道的一部分表单信息

  • Request URL:请求网址,我们提交的信息就是传到这个url里面去

  • Request method:请求方法,我们提交的方法

以上就是需要获得的基本信息,根据这些信息我们就可以编写刷票插件了,但作为一个对自身有高标准严要求的程序员来说,仅仅这样就足够吗?当然不会啦,我们得找一找这个提交过程有没有什么漏洞。

怎么找?分析源代码,找了找,果真还让我找到了!

看出什么没有,它这里有两个致命的漏洞:

  1. 它允许提交3支或3支以上的队伍,并且没有限制最大数量,只限制了最少数量。

  2. 它没有进行相同数据的筛选。

表单提交
构造表单信息

请求头信息

headers = {
'Accept': '/',
'Accept-Encoding': 'gzip',
'Accept-Language': 'zh-CN',
'Connection': 'keep-alive',
'Content-Length': '16',
'Content-Type': 'application/x-www-form-urlencoded',
'Host': 'www.dingnf.com',
'Origin': 'http://www.dingnf.com',
'Referer': 'http://www.dingnf.com/active/wxws_s',
'User-Agent': 'Mozilla/4.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.3029.110 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'
}

post表单网址

url = "http://www.dingnf.com/active/wxws_t"
params = {'ids': ['22', '22', '22']}
r = requests.post(url=url, data=params, headers=headers, proxies=proxies)

构造代理IP池

构造IP代理容器

def WriteIPadress():
all_url = [] # 存储IP地址的容器

代理IP的网址

url = "http://api.xicidaili.com/free2016.txt"
r = requests.get(url=url)
all_url = re.findall("d+.d+.d+.d+:d+",r.text)
with open("D:\code\python\new\Brush ticket\IP.txt",'w') as f:
for i in all_url:
f.write(i)
f.write(' ')
return all_url

主函数

由于某些IP地址是存在问题的,所以需要设置异常处理,以便让程序能够正常运行,而API的数据每15分钟更新一次,我们每跑完一遍列表的时间也差不多,因此也就不做其他处理了。

运行日志

代码

在这里还是要推荐下我自己建的Python学习群,群里都是学Python的,如果你想学或者正在学习Python ,欢迎你加入,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2021最新的Python进阶资料和零基础教学,欢迎进阶中和对Python感兴趣的小伙伴加入!

使用 Python 编写微信小程序自动刷票脚本是一种违反公平原则和相关规定的行为,可能会对正常的投票秩序造成破坏,并且很多平台都有反作弊机制,此类脚本很容易被检测到,导致刷票行为无效甚至面临法律风险。不过,从技术角度,可以大致介绍一些可能的实现思路。 ### 模拟用户操作方式 可以使用`Appium`库,它是一个自动化测试开源工具,支持多种移动平台应用的自动化测试,也可以用于模拟用户在微信小程序中的操作。 以下是一个简单的示例代码框架: ```python from appium import webdriver # 配置 Appium 所需的参数 desired_caps = { "platformName": "Android", # 平台名称,这里以 Android 为例 "platformVersion": "10", # 平台版本 "deviceName": "your_device_name", # 设备名称 "appPackage": "com.tencent.mm", # 微信的包名 "appActivity": ".ui.LauncherUI", # 微信的启动 Activity "noReset": True, # 不重置应用状态 "chromedriverExecutable": "/path/to/chromedriver", # ChromeDriver 路径 "automationName": "UiAutomator2", # 自动化引擎 "adbExecTimeout": 50000 # ADB 执行超时时间 } # 连接 Appium 服务器 driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) # 这里可以添加模拟打开微信小程序、找到投票页面、点击投票按钮等操作 # 例如,通过元素定位找到投票按钮并点击 try: vote_button = driver.find_element_by_id("vote_button_id") vote_button.click() except Exception as e: print(f"投票操作出错: {e}") # 关闭连接 driver.quit() ``` ### 网络请求方式 如果小程序的投票是通过网络请求实现的,可以使用`requests`库模拟网络请求来刷票。 ```python import requests # 假设投票接口的 URL vote_url = "https://example.com/vote_api" # 投票所需的参数 data = { "option": "option1", "user_id": "12345" } # 发送 POST 请求进行投票 response = requests.post(vote_url, data=data) if response.status_code == 200: print("投票成功") else: print(f"投票失败,状态码: {response.status_code}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值