记录学习笔记
如果对同一个地址进行操作,xpath过于长,又需要对同一个元素反复操作的情况下,可以使用selenium自带的ActionChains库。
ActionChains库是在刚打开的浏览器什么执行鼠标操作。
1、代码导包
from selenium.webdriver import ActionChains
2、用法
创建一个ActionChains对象,把刚才的浏览器传进去,再整体赋给一个变量act,之后就可以直接对act进行操作。对自动化破解滑块验证码使用的是
按住 click_and_hold(滑块)、
移动 move_by_offset(x轴移动距离,y轴移动距离)
距离数据可以使用QQ截图工具获取。这里找到了一个在线体验验证的网站进行测试。
# 找到滑块
ele=driver.find_element('xpath','//*[@id="app"]/div[1]/main/div[1]/div/div[3]/div/div/div/div[2]/div/div')
# 按住滑块
act=ActionChains(driver)
act.click_and_hold(ele)
# 移动滑块
act.move_by_offset(277,0)
#使鼠标操作生效
act.perform()
运行结束后,发现,程序确实成功运行了,但是由于我们需要看的滑块验证码再下一页,需要我们手动滚动鼠标才能看到页面,但是这样就成了半自动化,所有这样需要对页面进行滚动操作,确保我们可以看见效果。
这里使用的是:js代码滑动浏览器滚动条
代码:window.scrollTo(0, 397) 也就是把滚动条纵轴向下移动距离窗口397像素。
然后我们控制浏览器驱动js代码,即浏览器执行JavaScript代码。
driver.execute_script('window.scrollTo(0, 397)')
3、效果展示
鼠标操作-滑块验证
4、遗留问题
但是这也有一个问题,滑块验证每一次打开浏览器都会刷新,不能确保距离,也就是动态滑块如何解决?我网上查询发现,这需要通过图像处理技术提取验证码图像中的关键信息,再结合自动化测试工具模拟用户滑动行为来解决问题。需要按住两个库,明天试试网上的方法解决问题。