python+selenium+web实现自动化登录之破解滑动验证码时遇到无法定位验证码弹框上面的元素时解决方案

一、问题描述

笔者最近在写自动化登录的case时,有一个破解滑动验证码的过程,但是在定位滑动验证码上的元素时,总是提示定位不到对应元素,报错如下:

Unable to locate element: {"method":"xpath","selector":"//div[@class='show-code']/input"}

刚开时还以为定位方式不对,试了xpath定位,id/name定位,但是还是会报错;后面想是不是网络延迟问题导致的,所以在定位前加了延迟time.sleep(),

但是试了下不管家多久延迟还是有问题;后面想了下最大的原因可能是,页面没有跳转到这个验证码弹框页面上面来,后面仔细看了下页面代码,发现验证码弹框时一个frame框架,而frame中实际上是嵌入了另一个页面,而webdriver每次只能在一个页面识别,因此需要先定位到相应的frame,对那个页面里的元素进行定位。这个问题也是让我头疼了好久,最终还是解决了,开心。

 
二、解决方案
 
在定位验证码弹框上面的元素时,先跳转到frame框架,具体代码如下:
 
注意:如果网速不够快,最好加个延迟时间。
 
# 先跳到iframe框架
time.sleep(2)
driver.switch_to_frame('tcaptcha_iframe')
# 定位需要滑动的元素
time.sleep(1)
source = driver.find_element_by_xpath("//div[@id='tcaptcha_drag_thumb']")
 

猜你喜欢

转载自www.cnblogs.com/lxmtx/p/12725550.html