题外话:

     测试的目标网站如果,登录接口有验证码+浏览器环境检测的时候,有时候脚本小子就望而却步了比如我。因为正面对抗JS的环境检测和验证码是有难度的,这个时候我们可以借助Selenium + 打码平台来搞一搞。这里只做笔记记录,不做具体细节描述,如有兴趣可以私下交流。


测试目标:

        我们的假定目标如下,某贷网站的登录入口:

image.png

关键点:

       1、需要自动填充账号、密码

       2、需要将验证码进行截图,然后接入打码平台SDK

       3、这里暂时不管,短信验证码。


一般情况:

        使用Selenium进行自动化登录的基本操作是会的,结合打码平台的SDK的操作也是基本的,有时候会遇到验证码是特殊url,页面关联性很强的时候,想要打码,必须使用通过截图打码来完成登录。

关于selenium+验证码截图网上搜一搜有很多,比如你会搜到下面的:

image.png

上面的这种在windosw上确实OK的,


不一般的情况:

        上面的情况适合一部分Window用户,Mac电脑上就不一样了,多次的实践结果证明Mac上的对验证码截图部分代码应该是下面这样写的:

image.png

(曾经去B站大佬面前演示过B站可被撞库)


特殊情况:

        今天遇到了不一样的情况了,这个情况就是开篇截图里的情况。当登录页面有滚动条的时候,上面的2种做法都行不通了。回顾截图的代码,思路是,先整体当前网页全屏截图,然后通过Selenium查找到验证码图片元素,拿到该图片元素的长-宽,以及在页面的location相对位置,然后通过计算得到截图的坐标,通过4个坐标点,进行截图得到了我们想要的验证码图片。

       这里的新情况是,页面出现了滚动条,如下图:

image.png


    在有滚动条的时候,验证码图片的相对位置计算方式就不一样了,滚动条向下滚动了,验证码图相对于网页的左上角是更近了一些距离,这个距离就是滚动条的滚动距离。

    所以4个点坐标的正确计算方式记录一下应该如下:

image.png       上面的思路是:

                1. 获取当前滚动条滚动距离。

                2. 创建一个标签,记录该值,然后selenium找到这个标签,拿到这个值。

                3. 验证码元素的相对位置y值需要剪掉滚动的距离。

    这样就能拿到验证码图片了

image.png


        剩下的工作就是SDK打码,输入验证码,进行测试了,这就不多说了。。


总结:

        确认过眼神,就是这么整。