使用 Python 在京东上抢口罩的思路详解
作者:極光 发布时间:2023-06-01 01:10:30
标签:Python,京东,抢口罩
全国抗"疫"这么久终于见到曙光,在家待了将近一个月,现在终于可以去上班了,可是却发现出门必备的口罩却一直买不到。最近看到京东上每天都会有口罩的秒杀活动,试了几次却怎么也抢不到,到了抢购的时间,浏览器的页面根本就刷新不出来,等刷出来秒杀也结束了。现在每天只放出一万个,却有几百万人在抢,很想知道别人是怎么抢到的,于是就在网上找了大神公开出来的抢购代码。看了下代码并不复杂,现在我们就报着学习的态度一起看看。
使用模块
首先打开项目中 requirements.txt 文件,看下它都需要哪些模块:
requests:类似 urllib ,主要用于向网站发送 HTTP 请求。
beautifulsoup4: HTML 解析器,用于将 HTML 文档转换成一个复杂的树形结构。
pillow:Python 图像处理标准库,用于识别验证码。
配置文件
一般项目中我们都需要把一些可配置的内容放到配置文件中,现在我们来看下这里主要配置项:
# 邮寄地所属地区ID
area = 123456
# 这是配置的商品的ID
skuid = 6828101
# 打码服务器的地址
captchaUrl = http://xxx/pic
# 通知邮箱
mail = xxxxxx@qq.com
# cookie的设置
cookies_String = shshshfpa21jsda8923892949204923123
OK,有了配置文件,那我们就得有一段读取配置文件的代码,这段代码实现将配置内容加载到内存中。
import os
import configparser
# 加载配置文件
class Config(object):
def __init__(self, config_file='configDemo.ini'):
self._path = os.path.join(os.getcwd(), config_file)
if not os.path.exists(self._path):
raise FileNotFoundError("No such file: config.ini")
self._config = configparser.ConfigParser()
self._config.read(self._path, encoding='utf-8-sig')
self._configRaw = configparser.RawConfigParser()
self._configRaw.read(self._path, encoding='utf-8-sig')
def get(self, section, name):
return self._config.get(section, name)
def getRaw(self, section, name):
return self._configRaw.get(section, name)
主程序模块
我看 GitHub 上也有实现了运行程序后通过京东 App 扫码登陆,然后再通过登陆 Cookie 访问网站的,不过这里并没有使用这种方式,毕竟我们打开浏览器开发者工具也能很容易获取到登陆的 Cookie ,这里就是将 Cookie 直接放到配置文件里的方式。
# 主程序入口
# 检查是否存在要抢购的端口,然后进入循环扫描
if len(skuids) != 1:
logger.info('请准备一件商品')
skuId = skuids[0]
flag = 1
# 循环扫描该商品是否有货,有库存即会自动下单,无库存则休眠后继续扫描
while (1):
try:
# 初始化校验
if flag == 1:
logger.info('当前是V3版本')
validate_cookies() # 校验登陆状态
getUsername() # 获取登陆用户信息
select_all_cart_item() # 全选购物车
remove_item() # 删除购物车
add_item_to_cart(skuId) # 增加抢购的商品
# 检测配置文件修改
if int(time.time()) - configTime >= 60:
check_Config()
logger.info('第' + str(flag) + '次 ')
# 计数器
flag += 1
# 检查库存模块
inStockSkuid = check_stock(checksession, skuids, area)
# 自动下单模块
V3AutoBuy(inStockSkuid)
# 休眠模块
timesleep = random.randint(1, 3) / 10
time.sleep(timesleep)
# 校验是否还在登录模块
if flag % 100 == 0:
V3check(skuId)
except Exception as e:
print(traceback.format_exc())
time.sleep(10)
来源:https://mp.weixin.qq.com/s/LNXoMAwsVKkCf7SaG9JG9g


猜你喜欢
- Python自动化:python-pptx 批量生成幻灯片需求分析最近遇到了制作 PPT 报告的任务,前期收集整理后的表格数据长这样:随后要
- 1.开发环境 vue+element2.电脑系统 windows 10 专业版3.在开发的过程中,我们总是会使用到 git管理代码!使用方法
- PHP PDO 错误与错误处理PDO::ERRMODE_SILENT此为默认模式。 PDO 将只简单地设置错误码,可使用PDO::error
- 前言本文提供将音频提升音量的python代码,一如既往的实用主义代码。环境依赖ffmpeg环境安装ffmpy安装:pip install f
- Python数据库接口支持非常多的数据库,你可以选择适合你项目的数据库:GadFlymSQL MySQL PostgreSQL Micros
- 内容摘要:本文是一篇实例讲解的文章。作为一个普通的程序员,我深知,一个优秀的例程,对于正在学习编程的人是多么的有帮助。本文中使用的例程,是一
- 大家好,我是了不起!在某些难以抉择得时候,我们经常要用外力来帮助我们做出选择比如,梁山出征方腊前沙场点兵,挑选先锋的场景这个时候
- 刚安装Python的MySQL支持库,一口气遇到了一连串的问题,好在Google一下,均解决。遂记录下,备忘。 1.下载Python的MyS
- 前言:在使用DDT数据驱动+HTMLTestRunner输出测试报告时遇到过2个问题:1、生成的测试报告中,用例名称后有dict() -&g
- 翻看自己以前写的程序,发现写过一个爬取盘多多百度云资源的东西,完全是当时想看变形金刚才自己写的,而且当时第一次接触python大概写了有2天
- 本文实例讲述了PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法。分享给大家供大家参考,具体如下:前面一篇 PHP递归实现文件夹的复制
- BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库
- 本文为大家分享了mysql 8.0.12 解压版安装教程,供大家参考,具体内容如下1、首先在官网上下载mysql8.0.12的压缩包:下载地
- Python初学者小游戏:猜数字游戏逻辑:电脑随机生成一个数字,然后玩家猜数字,电脑提示猜的数字大了还是小了,供玩家缩小数字范围,达到既定次
- 阅读上一篇:打造设计你自己的字体 ⅠMyFonts.com上销售的字体总数已经超过55,000个。现有字体的巨大数量表明了一个事实:我们在设
- 今天重新研究了下VB里面的ScriptControl组件,发现asp里面也能调用。研究了下方法,后来和lcx讨论了下。得到了如下代码,在此感
- Mysql的安装方法 安装mysql的步骤如下:请注意按图中所示,有些选项和默认是不一样的。同时,如果您是重新安装mysql的话,要注意先备
- 一、什么是模块容器 -> 数据的封装函数 -> 语句的封装类 -> 方法和属性的封装模块 -> 模块就是程序,模块就
- 这里首先给出来我很早之前写的一篇博客,Python实现去除列表中重复元素的方法小结【4种方法】,感兴趣的话可以去看看,今天是在实践过程中又积
- pytorch Backward过程用时太长问题描述使用pytorch对网络进行训练的时候遇到一个问题,forward阶段很快(只需要几毫秒