Python之京东商品秒杀的实现示例


Posted in Python onJanuary 06, 2021

1 环境

操作系统:Windows 10
Python版本:3.9.0
Google Chrome  87.0.4280.88
ChromeDriver  87.0.4280.88
PyCharm 2020.2.3 x64

2 需求分析&前期准备

2.0 需求分析

目标是秒杀京东的订单,这里面有几个关键点,首先需要登录京东,其次你需要准备好订单,最后要在指定时间快速提交订单。
登录京东,这里就要用到一个爬虫利器Selenium,它是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击、下拉等等操作,所见即所得。另外对于一些 JavaScript 渲染的页面来说,此种抓取方式非常有效。

2.1 Selenium的安装

Selenium 的安装很简单,dos命令行:

pip3 install selenium

Python之京东商品秒杀的实现示例

Selenium安装好之后,并不能直接使用,它需要与浏览器进行对接。这里拿Chrome浏览器为例。若想使用Selenium成功调用Chrome浏览器完成相应的操作,需要通过ChromeDriver来驱动。

2.2 ChromeDriver的安装

这里是ChromeDriver的官方下载地址。

链接:https://chromedriver.storage.googleapis.com/index.html
下载之前先来确认下我们使用的Chrome浏览器版本。

Python之京东商品秒杀的实现示例

通过ChromeDriver的下载链接,找到与之对应的Chrome浏览器版本,根据你电脑系统的平台类型进行下载。

Python之京东商品秒杀的实现示例

下载完成之后,解压,将其放置在Python安装路径下Scripts文件夹中即可

Python之京东商品秒杀的实现示例

用PyCharm执行如下代码:

from selenium import webdriver
# 打开Chrome浏览器
driver = webdriver.Chrome()

成功打开浏览器,则证明ChromeDriver版本没问题,即可正常使用Selenium。

from selenium import webdriver
import datetime
import time
# 打开Chrome浏览器
driver = webdriver.Chrome()
 
def auto_buy(username, password, purchase_list_time):
  print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "打开登陆界面")
  driver.get("https://passport.jd.com/new/login.aspx")
  print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "开始填写账号密码")
  driver.find_element_by_link_text("账户登录").click()
  driver.find_element_by_name("loginname").send_keys(username)
  driver.find_element_by_name("nloginpwd").send_keys(password)
  driver.find_element_by_id("loginsubmit").click()
  #print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "手动拼图验证")
  #time.sleep(10) #此处睡眠时间用来手动拼图验证
  print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),"登陆成功")
  print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "等待时间到达抢购时间:",purchase_list_time, "......")
  while True:
    count = 0
    for buytime in purchase_list_time:
      nowtime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
      if nowtime == buytime:
        try:
          count += 1
          print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "开始第 %s 次抢购......"%count)
          print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "打开购物车并选中商品")
          driver.get("https://cart.jd.com/cart_index") # 打开购物车并选中商品
          # 如果没有全选,点击全选
          if not driver.find_element_by_class_name('jdcheckbox').is_selected():
            driver.find_element_by_class_name('jdcheckbox').click()
          print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "点击去结算")
          driver.find_element_by_link_text("去结算").click() # 去结算
          print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "点击提交订单")
          time.sleep(5)  #提交订单前必须等待几秒【感觉跟电脑性能快慢有关,不卡的电脑可以适当降低尝试】
          if driver.find_element_by_id("order-submit"):
            driver.find_element_by_id("order-submit").click() # 提交订单
          print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),"订单提交成功,请前往订单中心待付款付款")
          print("")
          continue
        except Exception as e:
          print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "抢购出现异常,重新抢购: ", e)
          continue
    time.sleep(0.001)
 
purchase_list_time = [
  "2020-12-25 10:00:00",
  "2020-12-25 10:00:01",
  "2020-12-25 10:00:02",
  "2020-12-25 10:00:03",
  "2020-12-25 10:00:04",
  "2020-12-25 10:00:05",
]
auto_buy('帐号', '密码', purchase_list_time)

预约商品到购物车——>修改代码抢购时间——>用PyCharm运行代码即可。

到此这篇关于Python之京东商品秒杀的实现示例的文章就介绍到这了,更多相关Python 京东商品秒杀内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python使用beautifulsoup从爱奇艺网抓取视频播放
Jan 23 Python
跟老齐学Python之关于类的初步认识
Oct 11 Python
Python简单实现子网掩码转换的方法
Apr 13 Python
Python中的Descriptor描述符学习教程
Jun 02 Python
python扫描proxy并获取可用代理ip的实例
Aug 07 Python
Python爬虫信息输入及页面的切换方法
May 11 Python
python 搭建简单的http server,可直接post文件的实例
Jan 03 Python
用sqlalchemy构建Django连接池的实例
Aug 29 Python
详解Python3迁移接口变化采坑记
Oct 11 Python
matplotlib基础绘图命令之imshow的使用
Aug 13 Python
python判断字符串以什么结尾的实例方法
Sep 18 Python
Python用access判断文件是否被占用的实例方法
Dec 17 Python
Python实现小黑屋游戏的完整实例
Jan 06 #Python
Jupyter Notebook 安装配置与使用详解
Jan 06 #Python
在Ubuntu中安装并配置Pycharm教程的实现方法
Jan 06 #Python
python requests库的使用
Jan 06 #Python
Python 实现进度条的六种方式
Jan 06 #Python
基于Python实现天天酷跑功能
Jan 06 #Python
python 下载文件的几种方法汇总
Jan 06 #Python
You might like
解析将多维数组转换为支持curl提交的一维数组格式
2013/07/08 PHP
dedecms函数分享之获取某一栏目所有子栏目
2014/05/19 PHP
个人写的PHP验证码生成类分享
2014/08/21 PHP
php读取der格式证书乱码解决方法
2015/06/22 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
2019/04/09 PHP
jquery 页面滚动到指定DIV实现代码
2013/09/25 Javascript
深入理解JSON数据源格式
2014/01/10 Javascript
为什么JS中eval处理JSON数据要加括号
2015/04/13 Javascript
浅谈jquery中next与siblings的区别
2016/10/27 Javascript
jQuery实现基本隐藏与显示效果的方法详解
2018/09/05 jQuery
vue-for循环嵌套操作示例
2019/01/28 Javascript
基于Vue的侧边目录组件的实现
2020/02/05 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
2020/05/27 Javascript
关于Node.js中频繁修改代码重启服务器的问题
2020/10/15 Javascript
vue中使用router全局守卫实现页面拦截的示例
2020/10/23 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
2020/11/06 Javascript
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
Python中map和列表推导效率比较实例分析
2015/06/17 Python
Python卸载模块的方法汇总
2016/06/07 Python
解析Python中的生成器及其与迭代器的差异
2016/06/20 Python
Python实现购物系统(示例讲解)
2017/09/13 Python
对tensorflow 的模型保存和调用实例讲解
2018/07/28 Python
python生成器与迭代器详解
2019/01/01 Python
Python实现定时自动关闭的tkinter窗口方法
2019/02/16 Python
Python+selenium点击网页上指定坐标的实例
2019/07/05 Python
python版百度语音识别功能
2019/07/09 Python
Python socket 套接字实现通信详解
2019/08/27 Python
用sqlalchemy构建Django连接池的实例
2019/08/29 Python
意大利在线药房:shop-farmacia.it
2019/03/12 全球购物
Linux操作面试题
2012/05/16 面试题
物业电工岗位职责
2013/11/20 职场文书
买卖车协议书
2014/04/21 职场文书
食品流通安全承诺书
2014/05/22 职场文书
SQL模糊查询报:ORA-00909:参数个数无效问题的解决
2021/06/21 Oracle
分位数回归模型quantile regeression应用详解及示例教程
2021/11/02 Python
win10电脑老是死机怎么办?win10系统老是死机的解决方法
2022/08/05 数码科技