博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python实现电商平台秒杀商品脚本程序
阅读量:2070 次
发布时间:2019-04-29

本文共 4626 字,大约阅读时间需要 15 分钟。

前言

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

作者:merlin&

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


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

  • 浏览器:谷歌chrome浏览器

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

  • 编程语言:Python

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

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

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

1 from selenium import webdriver2 import time3 4 #将账号密码赋给变量name、password5 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 #延时5s9 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 webdriver 2 import time 3  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_handle25         driver.find_element_by_link_text('我的购物车').click()26         all_handle = driver.window_handles27         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操作使用

转载地址:http://uwnmf.baihongyu.com/

你可能感兴趣的文章
word2vec 模型思想和代码实现
查看>>
怎样做情感分析
查看>>
用深度神经网络处理NER命名实体识别问题
查看>>
用 RNN 训练语言模型生成文本
查看>>
RNN与机器翻译
查看>>
用 Recursive Neural Networks 得到分析树
查看>>
RNN的高级应用
查看>>
TensorFlow-7-TensorBoard Embedding可视化
查看>>
轻松看懂机器学习十大常用算法
查看>>
一个框架解决几乎所有机器学习问题
查看>>
特征工程怎么做
查看>>
机器学习算法应用中常用技巧-1
查看>>
决策树的python实现
查看>>
了解 Sklearn 的数据集
查看>>
如何选择优化器 optimizer
查看>>
一文了解强化学习
查看>>
CART 分类与回归树
查看>>
seq2seq 的 keras 实现
查看>>
seq2seq 入门
查看>>
什么是 Dropout
查看>>