发布信息

京东Webdriver模块的此处操作(完整代码在文章末尾)

作者:软荐小编      2023-07-30 23:08:17     163

我几天前下载了 Webdriver 模块。 经过简单的研究,我发现这个模块可以做很多有趣的事情。 接下来我在这里通过一个例子来了解一下webdriver的操作(完整代码在文末)。

首先观察正常的购物流程(以易迅商城为例)

打开易迅网站()→点击登录→选择账号密码登录→输入账号密码→打开购物车,选择您要订购的商品→点击结帐→支付订单

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()

之后您需要勾选您想要下单的商品,然后点击结账

我使用微软浏览器的xpathhelper插件来定位复选框易语言抢购软件教程,结算键也可以使用文本来定位

易语言抢购软件教程_易语言抢购源码_易语言网页抢购

#使用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()

这时候如果直接用之前的定位方式去检查和结账的话,代码运行后就会报错。 这是因为点击我的购物车后,打开了一个新的网页,代码执行的默认网页还是在

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

该段的正确代码是

#保存初始网页
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_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操作

相关内容 查看全部