如何使用Selenium绕过Google reCAPTCHA进行测试

7

我正在使用Selenium测试基于Spring的Web应用程序。您能否建议一种绕过谷歌reCAPTCHA的解决方案,以便在测试应用程序时使用。

我正在这个环境中运行自动化测试。因此,手动检查reCAPTCHA的“我不是机器人”是不可能的。

为了测试目的,在我的测试环境上,我正在使用下面位置给出的测试密钥。

谷歌 reCAPTCHA 测试密钥

enter image description here

我正在使用Angular 5作为应用程序的前端。我正在使用ng-recaptcha库向ui添加reCAPTCHA。


2
reCapcha的主要目的是防止乌鸦和机器人访问当前的表单/页面。如果您能够攻破这个防御,请将您的简历发送给Google。在您的情况下,只需模拟此服务即可。无需测试此服务。它已经正常工作 :) - Zhivko.Kostadinov
3
我相信至少乌鸦无法回答标记有 Selenium 的问题 :) - undetected Selenium
哈哈 :) 我的意思是爬虫。哈哈 :) - Zhivko.Kostadinov
4个回答

8
您可以通过查找reCAPTCHA中复选框的x和y坐标,并单击该元素来完成此操作。
WebElement captcha = driver.findElement(By.xpath("html/body/div[1]/div[3]/div[2]/form/div[5]/div"));
        builder.moveToElement(captcha, 50, 30).click().build().perform();

builder 变量是什么? - Floris
1
这是org.openqa.selenium.interactions.Action对象。 - Joby Wilson Mathews

7

我不知道你的具体代码,但是你应该能够通过设置系统属性或一些标志来运行你的服务器,表明reCaptcha应该被禁用,并且在第一次添加表单时不要添加它。


1
可以做到,但需要大量的代码更改。但我正在寻找一种简单的方法来解决这个问题。 - vivekkurien
你应该小心,因为你正在有效地创建一个安全漏洞,允许绕过验证码,这就是为什么它需要以一种非常难以意外完成的方式进行制作。 - Ido Ran
这不是一个很好的解决方案,因为它在生产环境和测试环境之间引入了不必要的差异。更好的方法是使用测试密钥,并找到一种模拟点击复选框的方法。 - ILikeFood

7
您需要将驱动程序切换到iFrame以准确定位reCaptcha复选框。 命令:
WebElement iFrame = driver.findElement(By.xpath("xpath_of_reCaptcha_iFrame"));
driver.switchTo().frame(iFrame);

//现在可以点击reCaptcha的复选框了。

WebElement iFrame_checkbox = 
driver.findElement(By.xpath("xpath_of_reCaptcha_checkbox"));
iFrame_checkbox.click();

这应该是被接受的答案。在某些测试环境中,使用测试密钥并希望Selenium对reCaptcha框执行实际点击是完全有效的原因。 - nbarth

0

我没有找到任何可行的方法。如果你查看下面的代码,几乎所有的reCAPTCHA都是如此。

reCAPTCHA dom

  • 首先有一个iframe:您可以切换到它
  • 其次,有一个shadow-root元素“#document”,我没有找到任何覆盖它的方法。我使用了querySelector,但对我没用。
  • 但是如果您传递shadow-rootelement“#document”,则可以单击复选框或此处的第3个黄色标记。

唯一的解决方法是,在低环境中禁用它并使用自动化进行测试。

如果有人找到了合适的方法,请告诉我。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接