前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者:merlin&

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入


前几天下载了Webdriver模块,经过简单的研究,发现这个模块可以做很多有意思的事情,下面我就用一个实例来理解webdriver的此处操作(完整代码在文章末尾)。

  • 浏览器:谷歌chrome浏览器

  • 预先安装模块:selenium模块,Webdriver

  • 编程语言:Python

首先观察正常购物流程(以京东商城为例)

打开京东网址(www.jd.com)→点击登录→选择账号密码登录→输入账号密码→打开购物车,选择想要购买的物品→点击去结算→付款购买

1.首先导入第三方模块,指定webdriver位置

1 from selenium import webdriver
2 import time
3
4 #将账号密码赋给变量name、password
5 password = '京东密码'
6 name = '京东账号'
7 #指定webdriver位置
8 driver = webdriver.Chrome('/home/chromedriver')

2、打开京东网址

driver.get('https://www.jd.com/')

3.点击登录选项
首先将鼠标移动至登录选项,右击检查

发现可以根据文字内容定为到选项、

发现可以根据文字内容定为到选项

#点击登录选项
driver.find_element_by_link_text('你好,请登录').click()

4.进入登录界面,自动输入账号密码,登录账号

右击检查,发现<账户登录>选项可以通过文本定位,<账号输入框><密码输入框>分别由name属性进行定位,<登录>使用ID进行定位


1 #点击账户登录
2 driver.find_element_by_link_text('账户登录').click()
3 #输入账号密码
4 driver.find_element_by_id('loginname').send_keys(num)
5 driver.find_element_by_id('nloginpwd').send_keys(pwd)
6 #点击登录键
7 driver.find_element_by_id('loginsubmit').click()
8 #延时5s
9 time.sleep(5)

在我们点击登录之后,可能会出现一个滑块验证的环节,此环节可以用机器学习的方法自动通过验证,但是由于现在只是熟悉webdriver操作,可使用手动操作通过验证。

即在点击<登录>之后,添加延时 time.sleep(5) 并在5s之内通过滑块验证

5.点击购物车,勾选想要购买的物品,点击付款

购物车可以通过文本定位

driver.find_element_by_link_text('我的购物车').click()

然后要勾选要下单的物品,点击去结算

勾选框我使用的是谷歌浏览器的xpath helper插件来进行定位,结算键可以同样使用文本来定位

#使用xpath语法定位复选框
driver.find_element_by_xpath("/html[@class=' jd_retina']/body/div[@id='container']/div[@class='cart-warp']/div[@class='w']/div[@id='jd-cart']/div[@class='cart-main cart-main-new']/div[@id='cart-list']/div[@id='cart-item-list-01']/div[@id='vender_8888']/div[@class='item-list']/div[@id='product_promo_50077743033']/div[@id='product_100008492922']/div[@class='item-form']/div[@class='cell p-checkbox']/div[@class='cart-checkbox']/input[@class='jdcheckbox']").click()
#点击去结算
driver.find_element_by_link_text('去结算').click()

此时若直接使用之前的定位方法来勾选和结算,代码运行后会报错,这是因为点击我的购物车之后,打开了一个新的网页,但是代码执行的默认网页还是在www.jd.com

所以程序找不到我们定位的位置,所以会提示错误

该段的正确代码是

#保存初始网页
wnhandle = driver.current_window_handle
#点击我的购物车
driver.find_element_by_link_text('我的购物车').click()
#保存打开的所有网页
all_handle = driver.window_handles
#遍历保存的网页
for handle in all_handle:#判断当前打开的网页是否为初始网页if handle != wnhandle:#若为新打开的网页,则切换到新网页driver.switch_to.window(handle)
#设置延时
time.sleep(2)
#勾选复选框
driver.find_element_by_xpath("/html[@class=' jd_retina']/body/div[@id='container']/div[@class='cart-warp']/div[@class='w']/div[@id='jd-cart']/div[@class='cart-main cart-main-new']/div[@id='cart-list']/div[@id='cart-item-list-01']/div[@id='vender_8888']/div[@class='item-list']/div[@id='product_promo_50077743033']/div[@id='product_100008492922']/div[@class='item-form']/div[@class='cell p-checkbox']/div[@class='cart-checkbox']/input[@class='jdcheckbox']").click()
#点击结算
driver.find_element_by_link_text('去结算').click()

6.封装函数

将以上函数封装到模块中,方便调用

def login_in(self,num,pwd):

7.定义模块调用

def run_driver(self,num,pwd):self.login_in(num,pwd)

完整代码

 1 from selenium import webdriver2 import time3 4 name = '账号'5 password = '密码'6 7 #指定webdriver位置8 driver = webdriver.Chrome('/home/jmhao/chromedriver')9 #打开京东网址
10 driver.get('https://www.jd.com/')
11
12 class pay:
13     #登录模块
14     def login_in(self,num,pwd):
15         driver.find_element_by_link_text('你好,请登录').click()
16         time.sleep(1)
17         driver.find_element_by_link_text('账户登录').click()
18         time.sleep(1)
19         driver.find_element_by_id('loginname').send_keys(num)
20         driver.find_element_by_id('nloginpwd').send_keys(pwd)
21         time.sleep(1)
22         driver.find_element_by_id('loginsubmit').click()
23         time.sleep(5)
24         wnhandle = driver.current_window_handle
25         driver.find_element_by_link_text('我的购物车').click()
26         all_handle = driver.window_handles
27         for handle in all_handle:
28             if handle != wnhandle:
29                 driver.switch_to.window(handle)
30         time.sleep(2)
31         driver.find_element_by_xpath("/html[@class=' jd_retina']/body/div[@id='container']/div[@class='cart-warp']/div[@class='w']/div[@id='jd-cart']/div[@class='cart-main cart-main-new']/div[@id='cart-list']/div[@id='cart-item-list-01']/div[@id='vender_8888']/div[@class='item-list']/div[@id='product_promo_50077743033']/div[@id='product_100008492922']/div[@class='item-form']/div[@class='cell p-checkbox']/div[@class='cart-checkbox']/input[@class='jdcheckbox']").click()
32         driver.find_element_by_link_text('去结算').click()
33
34     #运行
35     def run_driver(self,num,pwd):
36         self.login_in(num,pwd)
37
38
39 if __name__ == '__main__':
40     jd = pay()
41     jd.run_driver(name, password)

此段代码只到结算步骤,只供熟悉webdriver操作使用

python实现电商平台秒杀商品脚本程序相关推荐

  1. 双十一到了,当我用Python采集了电商平台所有商品后发现....

    Python采集电商平台 写在前面 环境及模块 案例实现思路 代码展示 效果展示 最后 写在前面 这不是双十一快到了,为了以最优惠的价格买到自己想买的商品,我不惜用Python把ya ma xun 所 ...

  2. 电商平台-“秒杀”系统技术难题及解决方案

    电商平台-"秒杀"系统技术方案 文章目录 电商平台-"秒杀"系统技术方案 前言 一.什么是秒杀? 二.秒杀的技术难点? 1.避免对现有网站的冲击 2.高效解决网 ...

  3. Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战

    Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战 Java生鲜电商平台-  什么是秒杀 通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动 比如说京东秒杀,就是一种定时定量秒杀,在规定 ...

  4. 电商平台APP商品详情源数据接口代码分享

    电商平台APP商品详情源数据接口代码分享如下: 1.公共参数 名称 类型 必须 描述(接口代码教程wx19970108018) key String 是 调用key(必须以GET方式拼接在URL中,点 ...

  5. 做竞品分析如何获取电商平台的商品数据?

    要获取电商平台的商品数据进行竞品分析,可以采用以下几种方法: 1. 通过爬虫技术获取:使用Python等编程语言编写爬虫程序,模拟用户在电商平台的操作,例如搜索.翻页.点击商品等,然后获取页面的HTM ...

  6. 电商平台母婴商品销售数据分析 - Excel

    电商平台母婴商品销售数据分析 - Excel 这里写目录标题 电商平台母婴商品销售数据分析 - Excel 1. 项目背景与目的 2. 结论与建议 3. 数据预处理 4. 数据分析 4.1 业务维度 ...

  7. 电商平台 高并发 微服务 方案_Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战...

    Java生鲜电商平台- 什么是秒杀 通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动 比如说京东秒杀,就是一种定时定量秒杀,在规定的时间内,无论商品是否秒杀完毕,该场次的秒杀活动都会结束.这种 ...

  8. java 超卖_Java生鲜电商平台-秒杀系统如何防止超买与超卖?(小程序/APP)

    本文主要是通过实际代码讲解,帮助你一步步搭建一个简易的秒杀系统.从而快速的了解生鲜电商秒杀系统的主要难点,并且迅速上手实际项目. 我对生鲜电商秒杀系统文章的规划: 从零开始打造简易秒杀系统:乐观锁防止 ...

  9. 闲鱼架构专家,详解亿级C2C电商平台,商品体系架构如何搭建?

    文章来源:咸鱼技术(XYtech_Alibaba) 作者:意境 背景 闲鱼是一个典型的C2C场景的闲置交易平台,每个在闲鱼的用户都能享受到自由交易的乐趣,只要简单的输入商品名,商品价格,库存等信息就能 ...

最新文章

  1. 一次线上 JVM 调优实践,FullGC 40 次/天到 10 天一次的优化过程
  2. Qt Linguist 翻译
  3. 使用jQuery Treeview插件实现树状结构效果
  4. JQUERY操作html--获取和设置内容、属性、回调函数
  5. 利用xor给shellcode加壳
  6. Django源代码阅读分析-2:持久层结构分析
  7. Codeforces Round #387 (Div. 2) A+B+C+D!
  8. 2019-06-02 Java学习日记之多线程上
  9. 将某一位置1,将某一位置0,判断某一位是否为1
  10. 笨方法教你学python_笨方法学Python(1)
  11. 数据类型的提升(promotion)
  12. Office 2010 新特性 (二) Word 2010
  13. 卡尔曼滤波估matlab算法,INS-matlab 利用卡尔曼滤波算法估计惯导系统状态量的源代码~谢谢分享 - 下载 - 搜珍网...
  14. python使用pymysql包,操作mysql数据库,包括安装及使用(附代码)
  15. 越来越稳!Kubernetes 1.8.0 版本发布
  16. gpt mac linux window guid type,parted解决超大容量磁盘分区 GPT分区表
  17. Amazon CloudFront CDN + s3 源站跨域配置
  18. QQ自定义登录模拟器
  19. 电脑计算机进去用户文件不见了,为什么文件夹夹会不见
  20. CF597 (Div. 2)题解

热门文章

  1. 小程序中图片太大应该怎么处理
  2. java和大行自行车哪个好_全面解析曝光大行折叠自行车d8和p8配置有什么区别?哪个好?优缺点内幕透露...
  3. 八种方法求π的近似值
  4. A. Shifting Stacks
  5. 软件开发模式:瀑布与敏捷应用思考
  6. 乾颐堂安德HCIE面试真题系列19(戚ZJ)
  7. hdfs API命令操作京东云主机,采坑记录
  8. Python数据分析与挖掘实战学习12
  9. 中国气象网 气象数据开放平台 API使用方法 (Android)(已废弃)
  10. 在线观看视频--使用代码倍速播放