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

news2024/11/18 3:46:46

前言

      某宝脚本一搜能搜一大堆,就是不知道具体有没有用,但是这款某东的代码于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 True
    return 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

 效果展示:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/11606.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

webpack5 Preload / Prefetch

代码分离 | webpack 中文文档webpack 是一个模块打包器。它的主要目标是将 JavaScript 文件打包在一起,打包后的文件用于在浏览器中使用,但它也能够胜任转换(transform)、打包(bundle)或包裹(pa…

【云原生 | 44】Docker搭建Registry私有仓库之管理访问权限

🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专…

C++ Reference: Standard C++ Library reference: Containers: deque: deque: rend

C官网参考链接&#xff1a;https://cplusplus.com/reference/deque/deque/rend/ 公有成员函数 <deque> std::deque::rend C98 reverse_iterator rend(); const_reverse_iterator rend() const; C11 reverse_iterator rend() noexcept; const_reverse_iterator rend() c…

【Vue】VueX 的语法详解(3)

在VueX&#xff08;叉&#xff09;里面有一个潜移默化&#xff0c;或者说本质上的一个约束是什么&#xff1f; mutation里面只允许‍‍写同步代码&#xff0c;不允许写‍‍异步代码&#xff0c;虽然它不强制的限制你说你写了就给你报错&#xff0c;但实际上它的设计里面要求‍‍…

2022跨境出海:中东地区网红营销现状及特点

提到中东&#xff0c;大家的第一印象可能就是“头顶一块布&#xff0c;天下我最富”的土豪形象&#xff0c;近期的卡塔尔世界杯也再次给外界展示了他们的壕无人性。但由于宗教影响&#xff0c;他们的很多线下交际活动受到限制&#xff0c;也使得他们在互联网世界十分活跃&#…

申报须知,2022年滁州市各区县高新技术企业奖励政策变化,明光市

为了帮助企业提前准备和更好地开展2023年高新技术企业认定申报工作&#xff0c;安徽省大力鼓励企业申报高新技术企业&#xff0c;相应出台了相关政策&#xff0c;同时对于高企申报也有很多奖补&#xff0c;下面小编汇总了滁州市琅琊区、南谯区、天长市、明光市、来安县、全椒县…

jq扩展机制

1、在$挂上自定义函数方法&#xff1a; 如果想自定义函数方法&#xff0c;而且能通过$调用&#xff0c;那就需要用到extend&#xff08;&#xff09;方法&#xff1b;格式&#xff1a;$.extend({}) ; <script>$.extend({yiyi:function(){console.log("yiyi")}…

唯亚威VIAVI FI-60光纤识别器

光纤识别器可以轻松地识别光信号&#xff0c;而无需断开光缆或中断网络交通。也可以转换为光功率计&#xff08;OPM&#xff09;。 VIAVI FI-60 LFI能够使用户轻松检测光信号&#xff0c;而无需断开光缆或中断网络交通。FI-60 LFI还包括了独特的VIAVI SafeChekTM &#xff0c;…

特种劳动防护用品安全标志证书

特种劳动防护用品安全标志是确认特种劳动防护用品安全防护性能符合国家标准、行业标准,准许生产经营单位配发和使用该劳动防护用品的凭证。特种劳保用品是指在劳动作业生产过程中对人体起到保护作用的安全防护用品,与之对应的是普通劳保用品,如防护眼镜、劳保鞋等。常见的特种劳…

springboot入门

目录 1. 简介 2. 开发示例 2.1 创建springboot工程 3. 启动类 4. 常用注解 5. springboot配置文件 6. 开发一个controller 1. 简介 Spring Boot它本身并不提供Spring框架的核心特性以及扩展功能&#xff0c;只是用于快速、敏捷地开发新一代基于Spring框架的应用程序。 同…

英语语法学习

文章目录第一章 a\an的用法第二章 复数代词及复数名词的用法第三章 形容词的用法第四章 一般疑问句的用法第五章 Yes\No的用法第六章 人称代词的所有格式第七章 What疑问句与专有名词第八章 Why疑问句的用法第九章 Every的用法第十章 连词Because的用法第十一章 Who疑问句的用法…

基于Java+JSP+MySQL基于SSM的智能推荐商城系统-计算机毕业设计

项目介绍 本文的主要工作是对基于B/S模式及JSP技术的基于智能推荐的b2c销售网站进行了研究与设计。本文首先介绍了基于智能推荐的b2c销售网站的背景&#xff0c;分析比较了国内外相关基于智能推荐的b2c销售网站的运行模式、系统特点与开发技术。然后分析了目前热点的各种Web应…

基于PHP+MySQL的物流配送管理系统平台

随着时代的发展,物流显得越来越重要。尤其是在网购这样的大环境冲击之下基本上物流已经充满了我们生活的每一个角落。尽管如此,但是对于那种大型的货物和车辆,仍然没有一个很好的信息共享平台。经常会出现出主找不到货源,货主找不到车源的情况。车主和货主之间形成了严重的信息…

脑啡肽 (2-4)、Enkephalin (2-4)、6234-26-0

脑啡肽 (2-4)、GGF 可刺激 SK-N-SH 细胞对 deltorphin 的摄取。 Enkephalin (2-4), GGF, stimulated the uptake of deltorphin in SK-N-SH cells.编号: 127373 中文名称: 脑啡肽 (2-4)、Enkephalin (2-4) 英文名: Enkephalin (2-4) CAS号: 6234-26-0 单字母: H2N-GGF-OH 三字母…

【Hack The Box】windows练习-- Sauna

HTB 学习笔记 【Hack The Box】windows练习-- Sauna &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月7日&#x1f334; &#x1f3…

SpringSecurity(八)【RememberMe记住我】

八、RememberMe 简介 RememberMe 这个功能非常常见&#xff0c;无论是在 QQ、邮箱…都有这个选项。提到 RememberMe&#xff0c;往往会有一些误解&#xff0c;认为 RememberMe 功能就是把 用户名/密码 用 Cookie 保存在浏览器中&#xff0c;下次登陆时不用再次输入 用户名/密码…

正点原子开拓者FPGA,程序固化下载到板子里面

者电子信息专业硕士毕业&#xff0c;获得过多次电子设计大赛、大学生智能车、数学建模国奖&#xff0c;现就职于南京某半导体芯片公司&#xff0c;从事硬件研发&#xff0c;电路设计研究。对于学电子的小伙伴&#xff0c;深知入门的不易&#xff0c;特开次博客交流分享经验&…

XCode内存和UnityProfiler内存有较大差值

1&#xff09;XCode内存和UnityProfiler内存有较大差值 ​2&#xff09;Dynamic Bone插件和Job System的写法哪个好 3&#xff09;编辑器中iOS平台SoftShadow无效 4&#xff09;Unity 2021中阻止AssetPostprocessor代码改变导致相关资源Reimport 这是第313篇UWA技术知识分享的推…

用DIV+CSS技术设计我的家乡网站(web前端网页制作课作业)南宁绿城之都

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法&#xff0c;如盒子的嵌套、浮动、margin、border、background等属性的使用&#xff0c;外部大盒子设定居中&#xff0c;内部左中右布局&#xff0c;下方横向浮动排列&#xff0c;大学学习的前端知识点和布局方式都有…

大一学生《web课程设计》用DIV+CSS技术设计的个人网页(网页制作课作业)

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…