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 相关文章推荐
使用Protocol Buffers的C语言拓展提速Python程序的示例
Apr 16 Python
python获取一组汉字拼音首字母的方法
Jul 01 Python
深入学习Python中的装饰器使用
Jun 20 Python
Python操作Oracle数据库的简单方法和封装类实例
May 07 Python
Python实现的连接mssql数据库操作示例
Aug 17 Python
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
Dec 24 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
python multiprocessing模块用法及原理介绍
Aug 20 Python
python如何使用jt400.jar包代码实例
Dec 20 Python
PYQT5 vscode联合操作qtdesigner的方法
Mar 24 Python
详解python中groupby函数通俗易懂
May 14 Python
Python使用Pygame绘制时钟
Nov 29 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
谈PHP生成静态页面分析 模板+缓存+写文件
2009/08/17 PHP
浅析php中jsonp的跨域实例
2013/06/21 PHP
php输出1000以内质数(素数)示例
2014/02/16 PHP
学习php设计模式 php实现适配器模式
2015/12/07 PHP
thinkphp jquery实现图片上传和预览效果
2020/07/22 PHP
PHP PDOStatement::rowCount讲解
2019/02/01 PHP
laravel 判断查询数据库返回值的例子
2019/10/11 PHP
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
JavaScript中实现块作用域的方法
2010/04/01 Javascript
jquery 关于event.target使用的几点说明介绍
2013/04/26 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
2013/09/06 Javascript
javascript在myeclipse中报错的解决方法
2013/10/29 Javascript
轻松创建nodejs服务器(6):作出响应
2014/12/18 NodeJs
Bootstrap入门书籍之(四)菜单、按钮及导航
2016/02/17 Javascript
jQuery简单实现上下,左右滑动的方法
2016/06/01 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
Node.js系列之发起get/post请求(2)
2019/08/30 Javascript
[01:02:38]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第二场 1月10日
2021/03/11 DOTA
django Serializer序列化使用方法详解
2018/10/16 Python
详解pyppeteer(python版puppeteer)基本使用
2019/06/12 Python
python实现Dijkstra算法的最短路径问题
2019/06/21 Python
Python Lambda函数使用总结详解
2019/12/11 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
2020/02/11 Python
aws 通过boto3 python脚本打pach的实现方法
2020/05/10 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
2020/06/05 Python
python中setuptools的作用是什么
2020/06/19 Python
三星英国官网:Samsung英国
2018/09/25 全球购物
中国跨镜手机配件批发在线商店:TVC-Mall
2019/08/20 全球购物
面向对象设计的原则是什么
2013/02/13 面试题
社区创先争优承诺书
2014/08/30 职场文书
副校长竞聘演讲稿
2014/09/01 职场文书
mysql 8.0.24 安装配置方法图文教程
2021/05/12 MySQL
Golang中异常处理机制详解
2021/06/08 Golang
Jackson 反序列化时实现大小写不敏感设置
2021/06/29 Java/Android
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript