【Python】Python脚本实现抢券
来源:互联网 发布:淘宝国棉一厂 编辑:程序博客网 时间:2024/05/21 03:16
项目已经上传到 GitHub —— coupon
某东双十一,图书有优惠券,早上十点抢,瞬间没了,很气。直接用了一个暴(hen)力(sha)的方法,仅供学习Requests
参数获取
要实现发送请求抢券,需要获取券的URL
,并定制请求头Request Headers
下面所有参数都来自Chrome的开发者工具。大多浏览器都有开发者工具,可以按需选择
准备步骤:
- 登录网站
- 进入抢券页面
- 打开开发者工具(Chrome的快捷键是F12)
- 切换到Network栏
获取券的URL
在上面准备步骤的基础上,点击想要抢的券,这时Name
栏底部会出现一个新的链接,点击这个链接,而我们需要的参数就来自Header
中
复制Request URL
https://act-jshop.jd.com/couponSend.html? ......
获取Cookie
也是在上面这个页面中,下翻在Request Header
中,有一个Cookie
的参数,复制下来
ipLoc-djd=1-72-2799-0; ipLocation=%u5317%u4EAC; areaId=1; ......
获取券的Referer
同上,复制Referer
参数
https://sale.jd.com/act/hznk5FbYfOTiEp.html
Requests模块
对于Requests模块的深入学习,直接去翻文档
这里只举例说明一些抢券程序需要使用的方法
get方法
导入Requests
模块
>>> import requests
尝试获取某个网页。本例子中,我们来获取 Github 的公共时间线
>>> r = requests.get('https://github.com/timeline.json')
现在有一个名为r
的Response
对象。可以从这个对象中获取相应内容
>>> r.textu'[{"repository":{"open_issues":0,"url":"https://github.com/...
如果你想为请求添加HTTP
头部,只要简单地传递一个dict
给headers
参数就可以了
例如,指定User-Agent
>>> url = 'https://api.github.com/some/endpoint'>>> headers = {'User-Agent': 'Mozilla/5.0'}>>> r = requests.get(url, headers=headers)
会话对象Session
会话对象让你能够跨请求保持某些参数。它也会在同一个Session
实例发出的所有请求之间保持cookie
我们来跨请求保持一些cookie
s = requests.Session()s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')r = s.get("http://httpbin.org/cookies")print(r.text)# '{"cookies": {"sessioncookie": "123456789"}}'
会话也可用来为请求方法提供缺省数据。这是通过为会话对象的属性提供数据来实现的
s = requests.Session()s.auth = ('user', 'pass')s.headers.update({'x-test': 'true'})# both 'x-test' and 'x-test2' are sents.get('http://httpbin.org/headers', headers={'x-test2': 'true'})
任何你传递给请求方法的字典都会与已设置会话层数据合并。方法层的参数覆盖会话的参数
不过需要注意,就算使用了会话,方法级别的参数也不会被跨请求保持。下面的例子只会和第一个请求发送cookie
,而非第二个
s = requests.Session()r = s.get('http://httpbin.org/cookies', cookies={'from-my': 'browser'})print(r.text)# '{"cookies": {"from-my": "browser"}}'r = s.get('http://httpbin.org/cookies')print(r.text)# '{"cookies": {}}'
如果你要手动为会话添加 cookie,就使用Cookie utility
函数
session.cookies = cjrequests.utils.cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True)
这个函数把一个字典转为CookieJar
并返回,我们再把这个CookieJar
设置给Session
脚本实现
目录结构
coupon/ __init__.py cookie.txt main.py
将复制的
cookie
复制到cookie.txt
文件中ipLoc-djd=1-72-2799-0; ipLocation=%u5317%u4EAC; areaId=1; ......
写一个把
cookie.txt
转为字典的函数def get_cookie(): with open("cookie.txt") as f: cookies={} for line in f.read().split(';'): name,value=line.strip().split('=',1) cookies[name]=value return cookies
配置参数
user_agent = 'Mozilla/5.0 ......'couponUrl = 'https://act-jshop.jd.com/couponSend.html? ......'referer = 'https://sale.jd.com/act/hznk5FbYfOTiEp.html'
声明一个Session对象,并将参数赋值给他
session = requests.Session()session.headers['User-Agent'] = user_agentsession.headers['Referer'] = referersession.cookies = requests.utils.cookiejar_from_dict(get_cookie())
设置一个
while(True)
的循环,将预定时间和当前时间比较,如果相等,就发送请求while (True): # 当前时间 now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') # 如果到预定时间就开始发送请求,然后打印结果 if now == scheduled_time: r = session.get(couponUrl) print(r.text) break
完整代码
把关键代码贴一下
import requestsimport datetime# 抢券的时间scheduled_time = "2017-10-29 14:38"# 券的URLcouponUrl = "https://act-jshop.jd.com/couponSend.html?callback=jQuery3358743&roleId=8620885&key=b832a574abe84874b960c056c3ac6c6d&_=1509248591553"# 券的Refererreferer = "https://sale.jd.com/act/hznk5FbYfOTiEp.html"# 浏览器及版本user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'# 将cookie转为字典def get_cookie(): with open("cookie.txt") as f: cookies = {} for line in f.read().split(';'): name, value = line.strip().split('=', 1) cookies[name] = value return cookies# 配置Session的参数session = requests.Session()session.headers['User-Agent'] = user_agentsession.headers['Referer'] = referersession.cookies = requests.utils.cookiejar_from_dict(get_cookie())# 开始抢券def getCoupon(): print('等待抢券中......') while (True): # 当前时间 now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') # 如果到预定时间就开始发送请求,然后打印结果 if now == scheduled_time: r = session.get(couponUrl) print(r.text) breakif __name__ == '__main__': getCoupon()
运行
直接在命令行运行
python main.py
看见上面这几个字气不气???
后记
终于抢到券了,但是。。。
最后一天突然券的数量变多了,完全不用抢
这。。。骗子!
不过看到这行字还是挺开心的
有些时候要同时抢几张券,所以把参数改成了列表
# 券的URLrequestUrls = ["https://act-jshop.jd.com/couponSend.html?callback=jQuery2891171&roleId=8781460&key=48b40c64619a4bc9a3912c98d5a94fed&_=1510055639531","https://act-jshop.jd.com/couponSend.html?callback=jQuery6218594&roleId=8725660&key=a606cfe7c5b045d1b5e58b43a59fd9b1&_=1510056463018"]# 券的Refererreferers = ["https://sale.jd.com/act/bD1USlOE8n.html","https://sale.jd.com/act/bD1USlOE8n.html"]# 如果到预定时间就开始发送请求,然后打印结果 if now == scheduled_time: for i in range(len(requestUrls)): session.headers['Referer'] = referers[i] r = session.get(requestUrls[i]) print(r.text) break
不过还是抢不过那些专业抢券的人,据说人家是好几十万的电脑,再用加速器选一个距离近的节点,那我等凡人只能欣赏code:16
- 【Python】Python脚本实现抢券
- PHP 调用python 脚本实现python功能
- [Python]实现Python脚本转EXE
- python实现数据库迁移脚本
- python实现youdao终端脚本
- Python抢票脚本
- python脚本
- Python脚本
- python 脚本
- python脚本
- python脚本
- python脚本
- python脚本
- Python脚本
- python脚本
- Python open读写文件实现脚本
- Python open读写文件实现脚本
- Python open读写文件实现脚本
- Ubuntu16.04 hadoop2.7.3 伪分布配置
- IOS 去掉红点
- solr部署到tomcat
- CSS
- arm32和arm64常用指令B BL BLX机器码计算
- 【Python】Python脚本实现抢券
- Centos7.3安装Ambari2.4.2+HDP2.5.3搭建Hadoop集群
- 求数组的全排列
- 我的第三篇博客
- 2017.10.28闵神讲课DAY1
- 集成算法与泰坦尼克
- VC++6.0完美支持xp,win7,win8,win10
- Apache POI HSSF读写Excel总结
- <Qt>实例:视频播放器