Selenium+验证码打码时的特殊情况

发表于:2018-5-21 10:05

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:cf_hb    来源:勾陈安全实验室

  题外话
  测试的目标网站如果登录接口有验证码+浏览器环境检测的时候,有时候脚本小子就望而却步了,比如我。因为正面对抗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),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号