这两天发现了一个开源项目:京东抢购助手,看到群里的小伙伴拿来抢购口罩,有些确实可以抢到,就自己来折腾一下。
看项目介绍原本是作者用来抢手机的,但是由于最近疫情的原因被大家用来抢口罩。
仓库:https://github.com/tychxn/jd-assistant
主要功能:登录京东、查询库存,有货提交(更多功能见 github)
该项目由 Python 编写,自然需要安装 Python。如果电脑上没有 python 最好下载 Python 3.8,如果已经有 Python 2.7 可以跳过此步骤先试一下能不能跑。
Python 下载:
https://www.python.org/downloads
安装完可以在控制台输入:
python -V
查看 python 版本。如果提示该命令不存在,可能需要手动将安装的 python 添加到系统环境变量。
我用的是 windows 电脑,安装的是 Python 3.8.1,安装完的默认目录为:
C:\Users\savokiss\AppData\Local\Programs\Python\Python38
而 pip 程序目录为:
C:\Users\savokiss\AppData\Local\Programs\Python\Python38\Scripts
将上面两个目录添加到系统的环境变量中即可。
具体环境变量的设置就不多说了,不会的同学可以自行百度。
Python 安装完之后,进入到项目目录,在命令行执行:
pip install -r requirements.txt
如果安装的时候提示找不到 VC++ Build Tools,可以从下面链接下载:
http://cdn.savokiss.com/softwares/VC-Build-Tools-14.exe
打开项目根目录的 config.ini 这个文件可以看到,有四个参数需要配置,分别为:
eid
fp
track_id
risk_control
这四个参数获取方法如下:
找到任意有货商品,加购物车并结算,进入到 订单结算页
打开浏览器控制台(按 F12)
复制项目下 js/get_parameters.js
中的代码,粘贴到控制台并回车
得到控制台中显示出来的四个字段
具体见下图:
有一次我用上面的方法获取不到 eid 和 fp,然后看了一下作者的代码,发现项目根目录下的一个文件: get_eid_fp.html
,将这个文件直接用 chrome 打开就可以看到 eid 和 fp 了。
这应该是原作者发现这个问题后提供的另一种获取方法,只不过在文档上都没有提到。
打开 main.py
文件,里面的代码即为直接提交订单的代码,作者建议先拿一个商品测试一下(只提交订单不会付款)
如下图:
我们随便找一个有货的普通商品(最好不带任何优惠券的),商品详情页 URL 上的那串数字就是 sku_id。
如我上面用来测试的订单链接为:
https://item.jd.com/5242972.html
其中 5242972
即为 sku_id,我们将它拿下来填在上图代码中的位置。
然后在控制台执行:
python main.py
如果没登录,程序会生成一张二维码的图片,用京东 APP 扫描后即可登录成功。
正常的话,程序会自动提交该商品订单,在 我的订单 中就能看到一个未付款的订单。
由于我们要抢购无货的口罩,所以需要使用有货提交订单的代码:
from jd_assistant import Assistant
if __name__ == '__main__':
sku_ids = '100001324422:1' # 商品id
area = '1_72_4211' # 区域id
asst = Assistant() # 初始化
asst.login_by_QRcode() # 扫码登陆
asst.buy_item_in_stock(sku_ids=sku_ids, area=area, wait_all=False, stock_interval=5)
# 6个参数:
# sku_ids: 商品id。可以设置多个商品,也可以带数量,如:'1234' 或 '1234,5678' 或 '1234:2' 或 '1234:2,5678:3'
# area: 地区id
# wait_all: 是否等所有商品都有货才一起下单,可选参数,默认False
# stock_interval: 查询库存时间间隔,可选参数,默认3秒
# submit_retry: 提交订单失败后重试次数,可选参数,默认3次
# submit_interval: 提交订单失败后重试时间间隔,可选参数,默认5秒
代码见官方 wiki:
https://github.com/tychxn/jd-assistant/wiki
其中 sku_ids
我们可以从文末链接获取,注意只有没有下架但是无货的商品才管用。
而 area_id
可以根据自己所在的省市从项目中的 area_id
文件夹中获取。
stock_interval
是查询库存的时间间隔,默认 5 秒 太长,我们可以改成 1
由于这个项目的查询库存是同步的,如果某个商品查询时间过长会影响后面的查询,所以监控的商品 id 不易过多。
好了,本文只是从技术上验证该程序抢口罩的可行性,话说笔者自己的口罩也快用完了,希望口罩的产能能尽快跟上吧~
关于口罩的 sku_id 获取和其他一些口罩渠道可以看笔者的上一篇文章:
关于口罩购买渠道和信息渠道