题外话
测试的目标网站如果登录接口有验证码+浏览器环境检测的时候,有时候脚本小子就望而却步了,比如我。因为正面对抗JS的环境检测和验证码是有难度的,这个时候我们可以借助Selenium + 打码平台来搞一搞。这里只做笔记记录,不做具体细节描述,如有兴趣可以私下交流。
测试目标
我们的假定目标如下,某贷网站的登录入口:
关键点
1、需要自动填充账号、密码
2、需要将验证码进行截图,然后接入打码平台SDK
3、这里暂时不管短信验证码。
一般情况
使用Selenium进行自动化登录的基本操作是会的,结合打码平台的SDK的操作也是基本的,有时候会遇到验证码是特殊url,页面关联性很强的时候,想要打码,必须使用通过截图打码来完成登录。
关于selenium+验证码截图网上搜一搜有很多,比如你会搜到下面的:
上面的这种在windosw上确实OK的
不一般的情况
上面的情况适合一部分Window用户,Mac电脑上就不一样了,多次的实践结果证明Mac上的对验证码截图部分代码应该是下面这样写的:
(曾经去B站大佬面前演示过B站可被撞库)
特殊情况
今天遇到了不一样的情况了,这个情况就是开篇截图里的情况。当登录页面有滚动条的时候,上面的2种做法都行不通了。回顾截图的代码,思路是,先整体当前网页全屏截图,然后通过Selenium查找到验证码图片元素,拿到该图片元素的长-宽,以及在页面的location相对位置,然后通过计算得到截图的坐标,通过4个坐标点,进行截图得到了我们想要的验证码图片。
这里的新情况是,页面出现了滚动条,如下图:
在有滚动条的时候,验证码图片的相对位置计算方式就不一样了,滚动条向下滚动了,验证码图相对于网页的左上角是更近了一些距离,这个距离就是滚动条的滚动距离。
所以4个点坐标的正确计算方式记录一下应该如下:
上面的思路是:
1、获取当前滚动条滚动距离。
2、创建一个标签,记录该值,然后selenium找到这个标签,拿到这个值。
3、验证码元素的相对位置y值需要剪掉滚动的距离。
这样就能拿到验证码图片了
剩下的工作就是SDK打码,输入验证码,进行测试了,这就不多说了。。
总结
确认过眼神,就是这么整。
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。