selenium中ActionChains模拟滑动验证码(位移会重复执行的问题)

来源:赵克立博客 分类: Python 标签:--发布时间:2018-05-18 10:47:54最后更新:2018-05-18 11:00:09浏览:3743
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。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



微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python