使用 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,京东,抢口罩
0
投稿

猜你喜欢

  • 利用Django框架中select_related和prefetch_related函数对数据库查询优化

    2024-01-20 23:24:19
  • Vue.extend实现组件库message组件示例详解

    2024-05-09 15:09:26
  • Python决策树之基于信息增益的特征选择示例

    2023-01-09 23:44:32
  • 使用Django搭建web服务器的例子(最最正确的方式)

    2021-10-23 12:39:11
  • Python socket实现多对多全双工通信的方法

    2023-05-02 17:31:38
  • 如何实现在下拉菜单里输入文字?

    2010-06-03 10:31:00
  • Lost connection to MySQL server at 'reading authorization packet', system error: 0

    2024-01-20 19:06:26
  • python和php哪个更适合写爬虫

    2023-10-28 00:51:14
  • 详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)

    2023-08-22 18:03:06
  • Python手绘可视化工具cutecharts使用实例

    2022-12-25 07:27:54
  • html+vue.js 实现漂亮分页功能可兼容IE

    2024-05-11 09:13:25
  • 正计时JS代码

    2008-05-25 14:53:00
  • python使用epoll实现服务端的方法

    2021-05-16 22:52:34
  • XML与HTML的结合(下)

    2008-09-05 17:20:00
  • CSS元素类型

    2009-04-27 12:25:00
  • Python标准库os.path包、glob包使用实例

    2021-09-04 13:49:03
  • python中re.findall函数实例用法

    2021-03-28 07:51:20
  • python实现对任意大小图片均匀切割的示例

    2022-05-07 06:17:05
  • 《JavaScript语言精粹》译者序及样章试读

    2009-04-03 11:38:00
  • Python制作一个随机抽奖小工具的实现

    2022-10-22 03:53:29
  • asp之家 网络编程 m.aspxhome.com