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设计模式之单例模式实例
Apr 26 Python
使用Python判断质数(素数)的简单方法讲解
May 05 Python
浅谈python新手中常见的疑惑及解答
Jun 14 Python
Python端口扫描简单程序
Nov 10 Python
Python科学计算包numpy用法实例详解
Feb 08 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
May 04 Python
python通过微信发送邮件实现电脑关机
Jun 20 Python
Python不使用int()函数把字符串转换为数字的方法
Jul 09 Python
python机器学习库xgboost的使用
Jan 20 Python
详解Python 重学requests发起请求的基本方式
Feb 07 Python
Python Handler处理器和自定义Opener原理详解
Mar 05 Python
如何利用Python动态模拟太阳系运转
Sep 04 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
收听困难?教您超简便短波广播抗干扰方法!
2021/03/01 无线电
PHP 裁剪图片成固定大小代码方法
2009/09/09 PHP
apache mysql php 源码编译使用方法
2012/05/03 PHP
在php7中MongoDB实现模糊查询的方法详解
2017/05/03 PHP
6个常见的 PHP 安全性攻击实例和阻止方法
2020/12/16 PHP
js变量作用域及可访问性的探讨
2006/11/23 Javascript
jquery Mobile入门—外部链接切换示例代码
2013/01/08 Javascript
js中一维数组和二位数组中的几个问题示例说明
2014/07/17 Javascript
JavaScript实现自动弹出窗口并自动关闭窗口的方法
2015/08/06 Javascript
使用jQuery制作Web页面遮罩层插件的实例教程
2016/05/26 Javascript
详解vue2.0组件通信各种情况总结与实例分析
2017/03/22 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
2018/06/05 Javascript
详解JS转换数值函数Number()、parseInt()、parseFloat()
2018/08/24 Javascript
轻量级富文本编辑器wangEditor结合vue使用方法示例
2018/10/10 Javascript
Vue实现数据请求拦截
2019/10/23 Javascript
[46:21]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
在Python中使用Mako模版库的简单教程
2015/04/08 Python
Python复制文件操作实例详解
2015/11/10 Python
Python实现的密码强度检测器示例
2017/08/23 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
解决PyCharm import torch包失败的问题
2018/10/13 Python
记一次python 内存泄漏问题及解决过程
2018/11/29 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
tensorflow 动态获取 BatchSzie 的大小实例
2020/06/30 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
2020/09/16 Python
详解css3自定义滚动条样式写法
2017/12/25 HTML / CSS
印尼网上商店:Alfacart.com
2019/03/11 全球购物
网络工程专业毕业生推荐信
2013/10/28 职场文书
财务部岗位职责
2013/11/19 职场文书
财务科科长岗位职责
2014/03/10 职场文书
搞笑征婚广告词
2014/03/17 职场文书
社区居务公开实施方案
2014/03/27 职场文书
颐和园导游词
2015/01/30 职场文书
大学生预备党员自我评价
2015/03/04 职场文书
nginx搭建图片服务器的过程详解(root和alias的区别)
2021/03/31 Servers
HTML 里 img 元素的 src 和 srcset 属性的区别详解
2023/05/21 HTML / CSS