出现了标题问题,没有达到预期的效果。上网也查找一些有没有相关的内容的说明和解决方案,但是大多数解决方案与我这个情况好像不相关。特此将我自己的解决方案记录下来,供人参考。着急可以直接看 结果
环境
- macOS 10.14.4
- python 3.7.2
- selenium 3.141.0
- chrome 76.0.3809.132(64位)
- webdriver是和chrome相匹配的版本
问题
最近由于工作原因,需要自动登录jd的页面。但是最近发现有时登录时,经常弹出滑块让你进行拖拽验证。理论上直接破解js的加密函数是可以做到的,但是太费时间了。处于简单的目的,于是使用 python 的 selenium 库进行用户模拟操作处理。
在一切就绪后,发现了一个问题,就是拖拽的动作很不流畅,感觉是一顿一顿的移动,根本无法达到“拟人”的操作效果。
查看主要拖拽部分的代码,感觉也没有什么问题。主要代码如下:
# 选中要拖拽的元素
slider_el = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'xxx')))
# 然后‘点击并按住’。
ActionChains(self.driver).click_and_hold(slider_el).perform()
# tracks 是生成一些列的X轴位移距离数组。例如:[0,0,0,1,1,1,2,5,7, ...]
# 实现正向滑动
for track in tracks:
yoffset_random = random.uniform(-2, 4)
# xoffset、yoffset在函数内部都会被转为整数的。
ActionChains(self.driver).move_by_offset(xoffset=track, yoffset