ReCaptcha (它是广受欢迎的
“验证码” )是测试自动机在途中可能遇到的最痛苦的事情之一。 来自阳光明媚的印度的移民录制的成千上万的各种视频正走在网络上,谈论着用铃鼓跳舞可能欺骗这种野兽。 的确,尝试以主要目的是确保“您不是机器人”的东西与编程脚本进行交互非常困难。
一个非常重要的免责声明:
不可能欺骗验证码。如果您已经遇到此问题,并且正在阅读这篇文章,试图用Google搜索万能药的食谱,那么请知道它不存在。 此外,在您的脑海中,关于使用WebDriver来模拟现实用户行为,通过随机鼠标悬停元素,单击输入以及精心放置Thread.sleep()的想法,最有可能出现。 众所周知,这种方法行不通,不会白白浪费时间。
原来有没有出路?并非所有事情都如此悲观。 有时候,足以给自己一个最准确的答案:“我面临的挑战是什么?” 并从更广阔的角度看待情况。 在大多数情况下,您将了解,您的目标不是欺骗验证码,而是绕过该验证码以测试其背后隐藏的功能。 在我的案例中,我将与您分享为解决任务而找到的选择。
上下文:我们将产品的一部分集成到了第三方服务中,并希望监视它们是否一切正常,因为 它们不涵盖其平台的第三方部分。 要访问我们的功能,您首先必须登录。 那时我面对面遇到了验证码。 接下来,我将提供所有尝试解决此问题的选项。
不工作
通过Google或Facebook登录
除了经典身份验证外,还可以使用Google / Facebook进行规范登录。 当然,他们的“验证码”也在那里,因此此选项无助于解决问题。
模拟用户行为
是的,我也尝试过。 这很有趣,但是太天真了。
工人
Chrome / Firefox个人资料
让我们谈谈第一个“实时”选项。 这些浏览器的驱动程序(chromedriver / geckodriver)可以在预定义的用户配置文件下启动。 它存储所有存储的密码,Cookie,会话,甚至浏览器历史记录和书签。 即 因此,我们只是错过了对于我们的任务绝对不重要的登录步骤,因此我们直接进入了带有测试对象的页面。 它的实现如下:
- 创建一个“干净”的浏览器配置文件
- 手动输入验证码并登录到所需资源
- 将所需的配置文件复制到我们的项目(针对Firefox和Chrome的 HOWTO)
之后,我们需要告诉驱动程序应该从指定的配置文件加载它:
Firefox:
铬:
在安装了浏览器和通常的gecko- / cromedriver'ami的本地计算机上进行测试时,这种方法被证明是很好的,但是在Jenkins上运行时存在问题。 我们正在提升Kubernetes集群中的Selenium集线器和节点,因此我们遇到了麻烦:目录太长而无法将目录安装到容器中(一个干净的配置文件平均重约25 MB,这是一个很大的数目),以及浏览器的CRUD权限存在的一些问题,无法在运行时更改配置文件,并因执行“未知错误:无法写入首选项文件”而失败。 此外,在cookie和会话达到其到期日期之后更新配置文件非常不便,我不想在项目中保留一个包含配置文件的巨大文件夹,因此最终选择了以下选项。
饼干
“然后盒子刚刚打开”-在我们将手动接收的cookie添加到驱动程序之后,这就是描述情况的方式。 动作算法尽可能简单,并且不依赖于所选的浏览器:
- 手动登录
- 通过网络,我们查看请求标头->浏览器发送的Cookie
将它们添加到我们的测试中,如下所示:
这种方法的明显缺点是,需要在Cookie的有效期到期后手动更改它们。 但是,由于在经过测试的平台上该期限为3个月,因此我们选择了此解决方案。
如果我不需要登录?
但是,与授权和会话无关,而与一次操作(例如从购物篮下订单,注册新用户等)有关的情况又如何呢? 在这里情况甚至更糟。 我可以找到两个选择:
- 与开发人员达成协议,为您提供某种解决方法。 Google提供了这样的机会 ,但请记住,您有意识地在安全方面犯了一个小漏洞。
- 利用第三方付费服务获取您的验证码屏幕快照,尝试对其进行解码,然后向您发送解密后的值。 我本人还没有尝试过这种方法,因此无法完全推荐它。
总结一下
如您所见,没有绝望的情况。 但是,否认上述所有选项绝对有其自身的,相当重大的缺点是愚蠢的,因此选择权是您自己的。
谢谢您的关注。
PS:如果您知道在现实生活中可以使用的其他解决方案-请在评论中对其进行描述,以便阅读。