前言

某宝脚本一搜能搜一大堆,就是不知道具体有没有用,但是这款某东的代码于11-17还是可用的,大家拿去白嫖吧!

需要用到的一些工具


Python版本:3.7.8相关模块:DecryptLogin模块;argparse模块;requests模块;pyttsx3模块;beautifulsoup4模块;prettytable模块;以及一些python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

具体而言,就是先用DecryptLogin实现京东商城的模拟登录操作,然后再查询登录账号的购物车中的商品信息,接着打印这些商品信息供用户选择需要抢购的商品,最后用程序实现自动下单抢购目标商品。

因为整个逻辑很简单,也没有考虑一些可能存在的异常情况(毕竟只是一个简单的小案例,主要目的还是学习python和爬虫),所以整体实现起来其实蛮简单的。首先pip安装一下DecryptLogin包:

pip install DecryptLogin

具体而言,就是先用DecryptLogin实现京东商城的模拟登录操作,然后再查询登录账号的购物车中的商品信息,接着打印这些商品信息供用户选择需要抢购的商品,最后用程序实现自动下单抢购目标商品。

因为整个逻辑很简单,也没有考虑一些可能存在的异常情况(毕竟只是一个简单的小案例,主要目的还是学习python和爬虫),所以整体实现起来其实蛮简单的。首先pip安装一下DecryptLogin包:

pip install DecryptLogin

然后简单几行代码就能实现京东商城的模拟登录操作啦:

from DecryptLogin import login'''模拟登录'''
def login(self):lg = login.Login()infos_return, session = lg.jingdong()return infos_return, session

另外,为了避免经常需要重复扫码登录的问题,我加了个导入历史cookies的代码段(淘宝抢购那个脚本也有):


if os.path.isfile(cookie_cache_name):self.session = requests.Session()loadSessionCookies(self.session, cookie_cache_name)
else:self.infos_return, self.session = self.login()saveSessionCookies(self.session, cookie_cache_name)

但是没有加验证cookies是否还在有效期内的代码,感兴趣的同学可以自己添加一下,不感兴趣的同学每次过段时间代码报错就自己手动删下:

cookie_cache.pkl

这个文件吧,作为懒惰的惩罚吧,就在你运行代码的那个文件夹里。

接着,我们来获取一下当前购物车里的商品信息,和之前一样,简单抓包的结果如下:

代码实现如下:


cart_url = 'https://api.m.jd.com/api?'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36','origin': 'https://cart.jd.com','Referer': 'https://cart.jd.com',
}
data = {'functionId': 'pcCart_jc_getCurrentCart','appid': 'JDC_mall_cart','loginType': '3',
}
response = self.session.post(cart_url, headers=headers, data=data)
print(response.text)

​​​​​​​

看起来没什么问题,把我们需要的数据提取出来:


response_json, cart_infos = response.json(), {}
for idx, item in enumerate(response_json['resultData']['cartInfo']['vendors']):cart_info = {'title': self.rematch(r"'Name': '(.*?)',", str(item)),'Id': item['sorted'][0]['item']['Id'],'skuUuid': self.rematch(r"'skuUuid': '(.*?)',", str(item)),'IdForOldVersion': self.rematch(r"'IdForOldVersion': (.*?),", str(item)),'SType': '11',}cart_infos[str(idx)] = cart_info

接着打印并让用户选择想要抢购的商品信息:


# 打印并选择想要抢购的商品信息
title, items = ['id', 'title'], []
for key, value in cart_infos.items():items.append([key, value['title']])
self.printTable(title, items)
good_id = input('请选择想要抢购的商品编号(例如"0"): ')
assert good_id in cart_infos, '输入的商品编号有误'

效果大概是这样子的:

最后根据用户的选择结果进行下单就ok啦,下单相关的代码实现如下:

'''购买商品'''
def buygood(self, good_info):# 取消勾选购物车中的所有商品url = 'https://cart.jd.com/cancelAllItem.action'data = {'t': 0,'outSkus': '','random': random.random(),}response = self.session.post(url, data=data)# 勾选指定商品商品url = 'https://api.m.jd.com/api'body = '{"operations":[{"ThePacks":[{"num":1,"sType":%s,"Id":%s,"TheSkus":[{"num":1,"Id":"%s","skuUuid":"%s","useUuid":false}]}]}]}' % \(good_info['SType'], good_info['Id'], good_info['IdForOldVersion'], good_info['skuUuid'])data = {'functionId': 'pcCart_jc_cartCheckSingle','appid': 'JDC_mall_cart','body': body,'loginType': '3',}headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36','origin': 'https://cart.jd.com','Referer': 'https://cart.jd.com',}response = self.session.post(url, data=data, headers=headers)# 获取订单结算页面信息url = 'http://trade.jd.com/shopping/order/getOrderInfo.action'params = {'rid': str(int(time.time() * 1000)),}headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3','Referer': 'https://cart.jd.com/cart.action','Connection': 'keep-alive','Host': 'trade.jd.com'}response = self.session.get(url=url, params=params, headers=headers)if '刷新太频繁了' in response.text:print(f'[{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} INFO]: 刷新太频繁了')raise RuntimeError('刷新太频繁了')if response.status_code != requests.codes.OK:print(f'[{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} INFO]: 当前请求存在错误')raise RuntimeError('当前请求存在错误')soup = BeautifulSoup(response.text, 'html.parser')risk_control = soup.select('input#riskControl')[0].get('value').strip(' \t\r\n')order_detail = {'address': soup.find('span', id='sendAddr').text[5:],'receiver': soup.find('span', id='sendMobile').text[4:],'total_price': soup.find('span', id='sumPayPriceId').text[1:],'items': []}# 提交订单url = 'https://trade.jd.com/shopping/order/submitOrder.action'data = {'overseaPurchaseCookies': '','vendorRemarks': '[]','submitOrderParam.sopNotPutInvoice': 'false','submitOrderParam.trackID': 'TestTrackId','submitOrderParam.ignorePriceChange': '0','submitOrderParam.btSupport': '0','riskControl': order_detail,'submitOrderParam.isBestCoupon': '1','submitOrderParam.jxj': '1','submitOrderParam.trackId': '9643cbd55bbbe103eef18a213e069eb0','submitOrderParam.needCheck': '1',}if self.paywd is not None:data['submitOrderParam.payPassword'] = ''.join(['u3' + x for x in self.paywd])headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36','Host': 'trade.jd.com','Referer': 'http://trade.jd.com/shopping/order/getOrderInfo.action',}response = self.session.post(url=url, data=data, headers=headers)response_json = response.json()if response_json.get('success'): return Truereturn False

最终京东里的效果如下:

当然这样提示的效果可能不明显,毕竟你不会一直盯着这个终端看,你可以加个语音提示,代码如下:

# 电脑语音提示
for _ in range(5):pyttsx3.speak('已经为您抢购到你所需的商品, 请尽快前往京东完成付款.')

当然,也许你也不一定一直在电脑边上,所以你还可以加个server酱提示,可以在商品抢购成功之后将该消息发送到你的微信上,代码如下:


'''发送Server酱提示'''
def pushwechat(self, desp='已经为您抢购到你所需的商品, 请尽快前往京东完成付款.'):server_url = f'https://sc.ftqq.com/{self.server_key}.send'params = {'text': '商品抢购成功提示','desp': desp,}response = requests.get(server_url, params=params)return response

server酱配置地址如下:

http://sc.ftqq.com/3.version

ok,大功告成啦,完整源代码关注文末公众号即可

使用方式:​​​​​​​

usage: jingdongsnap.py [-h] [--interval INTERVAL] [--paywd PAYWD] [--key KEY]京东抢购脚本optional arguments:-h, --help           show this help message and exit--interval INTERVAL  抢购商品时查询商品是否可以购买的时间间隔(单位秒)--paywd PAYWD        支付密码, 部分商品需要支付密码才能提交订单, 输入密码不会导致你直接购买商品, 请放心使用--key KEY            Server酱的Key

效果展示:

快拿去用吧,需要完整代码的可关注下方公众号哦!

听说某宝抢购脚本大家都会了?那就在来个某东茅台抢购脚本吧。相关推荐

  1. 使用Python茅台抢购脚本的使用说明

    京东抢购流程 本文我介绍两种不同的方法方法二适合小白学习 文章有点长请耐心看完 方法一 简单明了的流程图 首先来说说京东的吧. 画个简单的流程图: null和90008 在流程图中,充分展示了为什么有 ...

  2. Python茅台抢购脚本详细教程

    目前,在多家电商平台都可以抢购茅台酒,包括天猫超市.京东.天猫会员店.国美.苏宁.网易严选等渠道,消费者使用一台手机便可参与抢购,不过,很多消费者依旧不清楚用手机抢茅台怎么抢,因为抢购的人实在太多,需 ...

  3. python小程序抢购脚本怎么写_Python茅台抢购脚本的使用说明!!

    本教程完成针对小白,大佬请绕道!! 本教程完成针对小白,大佬请绕道!! 本教程完成针对小白,大佬请绕道!! 重要的事情说三遍! 小白福音!!这两天问茅台脚本使用方法的人很多!!本人没有精力有限,所以弄 ...

  4. 抢购软件能用Java写吗_茅台抢购脚本详细教程!!!另已将茅台抢购做成了一个软件!!!...

    今天对软件进行了升级,公众号上重新回复茅台获取最新软件!! 最新软件解压后如图!以管理员方式运行 main.exe 软件 最后抢购成功是不会主动付款的,要自己去 APP 支付 注意使用茅台软件版抢购的 ...

  5. 用python实现淘宝毫秒级秒!! 天猫淘宝的抢购完美实现 而且说实话有很多人需要它。 每次在抢购前的无法提交订单导致很多买家无法购买。 今天我教给大家如何更好快速实现你的购买愿望! 教程如下!请仔

    用python实现淘宝毫秒级秒!! 天猫淘宝的抢购完美实现 而且说实话有很多人需要它. 每次在抢购前的无法提交订单导致很多买家无法购买. 今天我教给大家如何更好快速实现你的购买愿望! 教程如下!请仔细 ...

  6. 茅台抢购脚本详细教程, 另已将茅台抢购做成了一个软件

    今天对软件进行了升级,公众号上重新回复茅台获取最新软件!! WX 搜 Python编程与实战 最新软件解压后如图!以管理员方式运行 main.exe 软件 最后抢购成功是不会主动付款的,要自己去 AP ...

  7. 京东手机APP抢购茅台秒杀脚本(手机用)

    基于autojs的一个京东秒杀抢购脚本(手机app用) 京东手机APP抢购茅台秒杀脚本 说实话对autojs并不是很了解,只浅尝一下,因为家里有人想买茅台嘛,始终抢不到,就到处翻,终于翻到某大佬贡献出 ...

  8. Python茅台抢购脚本的使用说明!!

    本教程完成针对小白,大佬请绕道!! 本教程完成针对小白,大佬请绕道!! 本教程完成针对小白,大佬请绕道!! 重要的事情说三遍! 小白福音!!这两天搞了一个茅台脚本!所以就顺便弄了一个抢购软件!! 不需 ...

  9. python抢购脚本教程_Python茅台抢购脚本的使用说明!!

    原标题:Python茅台抢购脚本的使用说明!! 本教程完成针对小白,大佬请绕道!! 本教程完成针对小白,大佬请绕道!! 本教程完成针对小白,大佬请绕道!! 重要的事情说三遍! 小白福音!!这两天问茅台 ...

最新文章

  1. iOS APP配置HTTPS流程
  2. 编写sonar 插件:No SqaleSubCharacteristic annotation was found on class xxx
  3. idea如何安装lombok
  4. 怎么用python写名字_python中的__name__ 到底是个什么玩意?应该怎么用到它?
  5. 接触VC之四:COM组件模型基础
  6. 利用Mybatis对数据库进行增删改查操作
  7. 11. GD32F103C8T6 入门教程-外部中断
  8. 依赖dll_DLL攻击漫谈
  9. Discuz漏洞复现
  10. [2] ET框架初养成 mac OS第一次启动Demo
  11. Java图像处理——美颜相机项目核心
  12. 独家百度刷权重全套代码工具教程
  13. 清除计算机垃圾cmd命令,dos命令清理垃圾,教你dos命令清理垃圾的方法
  14. mac 安装java8
  15. (原创推荐文章)kerberos服务器端与客户端
  16. jssdk 获取微信收货地址_微信公众号JSSDK 获取经纬度
  17. java证书验证失败_使用certbot证书验证失败
  18. UWP ComboBox 样式的问题及改善
  19. 剑指Offer--约瑟夫环问题
  20. 破解打开证书加密的PDF文档-数字证书(电子书私钥)下载和导入教程

热门文章

  1. 新程序员001:开发者黄金十年
  2. 3.SVN服务器与客户端基本使用
  3. java 后端开发技能_Java 后端开发,应该重点学习哪些知识/技能?
  4. 用 C语言的写出几个小程序
  5. yaf 修改php.ini,Yaf的配置
  6. STM32的升级--ICP/ISP/IAP以及Ymodem协议分析
  7. Wallystech|802.11r Fast Roaming hardware IPQ4019 IPQ4029 routerboard
  8. java程序员从笨鸟到菜鸟之(十五)StringBuffer类练习题
  9. VTD_IO-ROS(2)—发送驾驶员控制信息
  10. 软件著作权人享有的权利有哪些