序
本文文字及图片均来自网络,仅供学习交流,无商业用途。版权归原作者所有。如有问题,请及时联系我们进行处理。
作者:梅林&
前几天下载了Webdriver模块。经过简单的研究,我发现这个模块可以做很多有趣的事情。现在我在这里用一个例子来理解webdriver的操作(完整代码在文末)。
首先,观察正常的购物流程(以JD.COM商城为例)
打开JD.COM(www.jd.com)网站→点击登录→选择账号密码登录→输入账号密码→打开购物车,选择想要购买的物品→点击结算→支付购买。
1。首先,导入第三方模块并指定webdriver 的位置
1从selenium导入web驱动程序 2导入时间 3 4 #将帐户密码分配给变量name,password 5 password = & # 39;JD.COM密码& # 39; 6 name = & # 39;JD.COM账号& # 39; 7 #指定webdriver位置 8 driver = web driver . chrome(& # 39;/home/chrome driver & # 39;) 2。打开JD.COM网站
driver . get(& # 39;https://www.jd.com/'。点击登录选项首先将鼠标移动到登录选项上,点击右键查看。
发现可以根据文本内容来定位选项、
根据文本内容查找可以定位的选项。
#点击登录选项 driver . find _ element _ by _ link _ text(& # 39;您好,请登录& # 39;).点击() 4。进入登录界面,自动输入账号密码,登录账号
右键查看查找:选项可以通过文字定位,& lt密码输入框>:通过名称属性分别定位,使用ID定位
1 #点击账号登录 2 driver . find _ element _ by _ link _ text(& # 39;帐户登录& # 39;).click() 3 #输入账号密码 4 driver . find _ element _ by _ id(& # 39;登录名称& # 39;).send _ keys(num) 5 driver . find _ element _ by _ id(& # 39;nloginpwd & # 39).send_keys(pwd) 6 #点击登录键 7 driver . find _ element _ by _ id(& # 39;登录提交& # 39;).click() 8 # Delay 5s 9 time . sleep(5) 我们点击登录后,可能会出现滑块验证链接,可以通过机器学习自动验证,但现在我们只熟悉webdriver的操作,可以通过手动操作来验证。
即点击Then后,加上delay time.sleep(5)并在5s内通过滑块验证。
5.点按购物车,检查您想要购买的商品,然后点按“支付”。
购物车可以通过文本定位。
driver . find _ element _ by _ link _ text(& # 39;我的购物车& # 39;).点击() 然后勾选要放置的物品,点击结算。
复选框我用Google浏览器的xpath helper插件定位,结算键也可以用文本定位。
#使用xpath语法找到复选框 driver . find _ element _ by _ XPath(& # 34;/html[@ class = & # 39;jd _ retina & # 39]/body/div[@ id = & # 39;集装箱& # 39;]/div[@ class = & # 39;cart-warp & # 39;]/div[@ class = & # 39;w & # 39]/div[@ id = & # 39;JD-cart & # 39;]/div[@ class = & # 39;cart-main cart-main-new & # 39;]/div[@ id = & # 39;购物车列表& # 39;]/div[@ id = & # 39;购物车-商品-列表-01 & # 39;]/div[@ id = & # 39;vender _ 8888 & # 39]/div[@ class = & # 39;项目列表& # 39;]/div[@ id = & # 39;product _ promo _ 50077743033 & # 39]/div[@ id = & # 39;product _ 100008492922 & # 39]/div[@ class = & # 39;项目-表单& # 39;]/div[@ class = & # 39;单元格p-复选框& # 39;]/div[@ class = & # 39;购物车-复选框& # 39;]/input[@ class = & # 39;jdcheckbox & # 39]").click() #点击结算 driver . find _ element _ by _ link _ text(& # 39;算账& # 39;).click() 此时,如果直接使用之前的定位方式进行结账,代码运行后会给出错误,因为点击我的购物车后,会打开一个新的网页,但是代码执行的默认网页仍然是www.jd.com。
所以程序找不到我们的位置,所以会提示错误。
此部分的正确代码是
#保存初始网页 wn handle = driver . current _ window _ handle #点击我的购物车 driver . find _ element _ by _ link _ text(& # 39;我的购物车& # 39;).click() #保存所有打开的网页 all _ handle = driver . window _ handles #遍历已保存的网页 for handle in all _ handle: #确定当前打开的网页是否为初始网页[/h] = wnhandle: #如果是新打开的网页,则切换到新网页 driver . switch _ to . window(handle) #设置延迟 时间. sleep(2)jd _ retina & # 39]/body/div[@ id = & # 39;集装箱& # 39;]/div[@ class = & # 39;cart-warp & # 39;]/div[@ class = & # 39;w & # 39]/div[@ id = & # 39;JD-cart & # 39;]/div[@ class = & # 39;cart-main cart-main-new & # 39;]/div[@ id = & # 39;购物车列表& # 39;]/div[@ id = & # 39;购物车-商品-列表-01 & # 39;]/div[@ id = & # 39;vender _ 8888 & # 39]/div[@ class = & # 39;项目列表& # 39;]/div[@ id = & # 39;product _ promo _ 50077743033 & # 39]/div[@ id = & # 39;product _ 100008492922 & # 39]/div[@ class = & # 39;项目-表单& # 39;]/div[@ class = & # 39;单元格p-复选框& # 39;]/div[@ class = & # 39;购物车-复选框& # 39;]/input[@ class = & # 39;jdcheckbox & # 39]").click() #点击结算 driver . find _ element _ by _ link _ text(& # 39;算账& # 39;).click() 6。封装函数
将以上功能封装成一个模块,方便调用。
Def login _ in (self,num,PWD): 7。定义模块调用[/S2/]
Run _ driver (self,num,pwd): self.login _ in (num,pwd) 完整代码
1从selenium导入webdriver 2导入时间 3 4 name = & # 39;账号& # 39; 5密码= & # 39;密码& # 39; 6 7 #指定webdriver位置 8 driver = web driver . chrome(& # 39;/home/jmhao/chrome driver & # 39;) 9 #打开JD.COM网站 10 driver . get(& # 39;https://www.jd.com/') 11 12 class pay: 13 #登录模块 14deflogin _ in (self,num,pwd): 15 driver . find _ element _ by _ link _ text(& Hello,请登录& # 39;).click() 16 time . sleep(1) 17 driver . find _ element _ by _ link _ text(& # 39;帐户登录& # 39;).click() 18 time . sleep(1) 19 driver . find _ element _ by _ id(& # 39;登录名称& # 39;).send _ keys(num) 20 driver . find _ element _ by _ id(& # 39;nloginpwd & # 39).send _ keys(pwd) 21 time . sleep(1) 22 driver . find _ element _ by _ id(& # 39;登录提交& # 39;).click() 23 time . sleep(5) 24 wn handle = driver . current _ window _ handle 25 driver . find _ element _ by _ link _ text(& # 39;我的购物车& # 39;).click() 26 all _ handle = driver . window _ handles 27 for handle in all _ handle: 28 if handle!= wn handle: 29 driver . switch _ to . window(handle) 30 time . sleep(2) 31 driver . find _ element _ by _ XPath(& # 34;/html[@ class = & # 39;jd _ retina & # 39]/body/div[@ id = & # 39;集装箱& # 39;]/div[@ class = & # 39;cart-warp & # 39;]/div[@ class = & # 39;w & # 39]/div[@ id = & # 39;JD-cart & # 39;]/div[@ class = & # 39;cart-main cart-main-new & # 39;]/div[@ id = & # 39;购物车列表& # 39;]/div[@ id = & # 39;购物车-商品-列表-01 & # 39;]/div[@ id = & # 39;vender _ 8888 & # 39]/div[@ class = & # 39;项目列表& # 39;]/div[@ id = & # 39;product _ promo _ 50077743033 & # 39]/div[@ id = & # 39;product _ 100008492922 & # 39]/div[@ class = & # 39;项目-表单& # 39;]/div[@ class = & # 39;单元格p-复选框& # 39;]/div[@ class = & # 39;购物车-复选框& # 39;]/input[@ class = & # 39;jdcheckbox & # 39]").click() 32 driver . find _ element _ by _ link _ text(& # 39;算账& # 39;).click() 33 34 # Run 35 def Run _ driver(self,num,pwd): 36 self。login _ in (num,pwd) 37[_ _ main _ _ & # 39;: 40jd = pay() 41jd . run _ driver(name,password) 这段代码只到结算步骤,只有熟悉webdriver操作的人才会用到。