selenium中ActionChains模拟滑动验证码(位移会重复执行的问题)
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2018-05-18 11:00:09
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章
问题描述
ActionChains是降一些操作加入链表中然后依次执行,比如滑动验证中,先按下然后移动鼠标到指定位置最后放下这种操作,为啦模拟真实情况,过程中模拟啦多次移动鼠标的操作,但是执行过程中鼠标第一次移动正常,后续移动过程中跳的非常厉害,移动的距离比写的数字要大,如下
action = ActionChains(self.driver) action.move_to_element(dragger) action.click_and_hold(dragger).perform() # 鼠标左键按下不放 times = 5 i = times tx = x while i > 0: # time.sleep(1) time.sleep(random.randint(5, 10) / 10) of = x / times tx = tx - of print(of) action.move_by_offset(of, 0).perform() #action._actions.pop()#加上这句就没有问题啦 i = i - 1 time.sleep(random.randint(1, 2)) action.release().perform() time.sleep(2)
解决方法
查看ActionChains的源码后发现你的每次操作都会被保存到action._actions这个列表里面,也就是说在while循环中每移动一次,这个操作就会被保存到这个列表里面,下面再移动的时候之前操作的操作还会被执行,这个问题之前一直没有发现才导致的这个问题,
解决方法也很简单,上面代码里已经写上去啦,每次执行完后把这个操作从列表中移除掉就ok