这是一个可以帮助我们抢券的小工具。不一定能抢到,只是增加了概率。
首先我们需要安装python环境
这里我们选用Anaconda,它可以方便的管理python包和环境。
下载地址https://www.anaconda.com/products/individual
我们使用Anaconda中的Spyder来编辑抢券小工具
浏览器选择
我使用了火狐浏览器,以下讲解截图均是基于火狐浏览器。
下载地址https://www.firefox.com.cn/
正片开始
1.首先使用火狐浏览器打开京东商城,登录账号,进入优惠券页面
2.右键选择检查元素
3.点击页面领取一个优惠券,查看网络
接口参数讲解
需要用到2个接口,第一行和第四行。第一行这个接口是京东进行身份验证用的,第四行接口是抢券用的。
身份验证接口
我们需要从中获取一些有用信息。请求头参数(User-Agent、Referer、Cookie)。其中User-Agent、Referer这2个参数和抢券接口是相同的。
通过复制请求头。我们从中剥离出User-Agent、Referer、Cookie数据,它们分别对应完整代码中的user_agent、referer、cookie_1
通过复制网址获取身份验证接口的地址,对应完整代码中的url_1
抢券接口
和身份验证接口一样,通过复制信息获取Cookie和接口地址,分别对应完整代码中的cookie_2、url_2。
需要注意的是,下面数据是接口地址,其中的key要删除掉,这个key是优惠券的编码,我们需要把它替换成想要抢的券的编码。对应完整代码中的coupon_key
https://a.jd.com/indexAjax/getCoupon.html?callback=jQuery5746673&key=0271DFD6890D3B60ACB8BA8A9E49BEB17FE8E6323A36834B63FE69E95D38088EEB376E75E098A8957F9DCEC56AAF5FD6EE12CF82BAC47129E098BA801496C8C2BED55B0AD982233C8C5D05B90A17FC67F0C6597810E700D247B396787AA294B7&type=1&_=1597754338810
需要改成这样,这里的coupon_key是券的编码
url_2 = "https://a.jd.com/indexAjax/getCoupon.html?callback=jQuery5746673&key={0}&type=1&_=1597754338810".format(coupon_key)
获取券编码方式:
-
激活选取页面中的元素功能
image.png -
点击优惠券,找到带有data-key层级的div标签。这个data-key的值就是我们要找的券的编码。对应完整代码中的coupon_key
image.png
至此,我们已经获取到需要的数据了,请自行替换参数。scheduled_time是设置抢券的时间,可以精确到秒。完整代码如下:
import requests
import datetime
# 设置抢券的时间
scheduled_time = "2020-08-19 11:36:59"
# 浏览器及版本
user_agent = ""
# 接口的referer参数
referer = ""
# cookie参数(验证身份接口)
cookie_1 = ""
# 验证身份接口请求头
header_1={
'User-Agent':user_agent,
'Referer':referer,
'Cookie':cookie_1}
# 验证身份接口地址
url_1 = ""
# cookie参数(抢券接口)
cookie_2 = ""
# 抢券接口请求头
header_2={
'User-Agent':user_agent,
'Referer':referer,
'Cookie': cookie_2}
# 券的编号
coupon_key = ""
# 抢券接口地址
# 注意把获取到的接口地址改成下面代码模样
url_2 = "https://a.jd.com/indexAjax/getCoupon.html?callback=jQuery5746673&key={0}&type=1&_=1597754338810".format(coupon_key)
session = requests.session()
# 先调用京东反爬接口,进行身份验证
response_1 = session.get(url_1, headers=header_1)
print(response_1.text)
# 执行抢券操作
print('等待抢券中......')
while True:
# 当前时间
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
# 如果到预定时间就开始调用抢券接口,然后打印结果
if now >= scheduled_time:
response_2 = requests.get(url_2, headers=header_2)
response_2.encoding='utf-8'
print(response_2.text)
if '领券成功' in response_2.text:
break
补充说明
Spyder编辑器,左上角三角为运行。右上角方块为停止。右侧Console中会打印数据,如果出现重复打印已领取或其它领取失败的情况,务必及时点击右上角方块停止运行,以防造成不必要的麻烦。
特别说明
此篇文章重在学习Python自动化,切莫他用。