最近在做一个可信认证的自动化,把之前手工做的活,用程序替代了,该网站没有客户端,没有移动站点,只有通过selenium 来模拟自动化登录。
问题记录
Q:使用selenium 元素定位的时候会和屏幕中显示的不一致
S:开发机器使用的是win笔记本,显示设置缩放与布局里面显示分辨率不是100% 要根据屏幕缩放之前的坐标来看就是一致的。
Q:使用selenium 截图截下验证码的图片,再做缩放,发送到识别验证码的服务器,再根据返回坐标,定位到验证码绝对坐标,去模拟点击,一整套流程下来,虽然识别出来的坐标没啥问题, 但是计算精度的问题会导致最后算出来的坐标会有偏移,通过率会收到计算误差的影响。
S: 直接定位到验证码图片的src,去服务器请求内容回来,不通过截图的方式来做。通过selenium 中ActionChains 的move_to_element_with_offset 定位到验证码图片的相对坐标去点击,只需要处理一下原图和网页中图片大小不一致带来的缩放问题就可以把通过率,逼近到服务端识别验证码图片的准确率。
Q:网站通过两次验证码保护一个公司下的所有证书,网页有动态内容,验证码也是动态的加到DOM 树中的。去模拟验证第一个验证码的时候一般没有什么问题,等到去验证第二个验证码的时候,页面上有了两个验证码,如果不注意,或者没有处理就会报错,如:元素不可交互,不可点击等。
S:主要原因是元素不唯一。可以通过一个列表记录之前已经交互过的webElement 对象,第二次再看下定位到的元素是不是在这个列表里就可以了。