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

Posted

技术标签:

【中文标题】如何绕过 Google reCAPTCHA 使用 Selenium 进行测试【英文标题】:How to bypass Google reCAPTCHA for testing using Selenium 【发布时间】:2018-11-01 03:17:02 【问题描述】:

我正在使用 Selenium 测试基于 Spring 的 Web 应用程序。您能否建议在测试应用程序时绕过 google reCAPTCHA 的解决方案。

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

出于测试目的,我在以下位置给出的测试环境中使用测试密钥。

Google reCAPTCHA Testing Key

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

【问题讨论】:

reCapcha 的主要目的是防止:乌鸦和机器人访问当前表单/页面。如果你能破解这个防御,把你的简历发给谷歌。在您的情况下,只需模拟此服务。无需测试此服务。它正在工作:) @Zhivko.Kostadinov 我敢肯定,至少 乌鸦 无法回答带有 Selenium 标记的问题 :) 哈哈 :) 我的意思是蜘蛛。哈哈哈:) 【参考方案1】:

您可以通过在 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 变量是什么? 它是 org.openqa.selenium.interactions.Action 对象。【参考方案2】:

我不知道您的确切代码,但您应该能够使用系统属性或某些标志来运行您的服务器,这些标志表明应该禁用 reCaptcha 并且不首先将其添加到表单中。

【讨论】:

这是可能的,但需要大量代码更改。但我正在寻找解决此问题的简单方法。 你应该小心,因为你正在做的是有效地创建一个允许绕过验证码的安全漏洞,这就是为什么它需要以这样的方式制作,这样就很难意外地做到这一点 这不是一个很好的解决方案,因为它在生产环境和测试环境之间引入了不必要的差异。更好的方法是使用测试键并找到模拟单击复选框的方法。【参考方案3】:

您应该将驱动程序“切换”到 iFrame 以准确定位 reCaptcha 的复选框。 命令:

WebElement iFrame = driver.findElement(By.xpath("xpath_of_reCaptcha_iFrame"));
driver.switchTo().frame(iFrame);

// 现在可以点击reC​​aptcha的复选框了。

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

【讨论】:

这应该是公认的答案。使用测试密钥并希望 selenium 在某些测试环境中对 reCaptcha 框执行实际点击是完全正当的。【参考方案4】:

我没有找到任何可行的方法。如果您查看几乎所有 reCAPTCHA 的以下代码

第一个有 iframe :你可以切换到它 第二个影子根元素“#document”,我没有找到任何方法来覆盖它。我使用了 querySelector,对我不起作用。 但如果您传递 shadow-root 元素“#document”,则可以单击复选框或此处的第 3 个黄色标记。

唯一的方法是解决这个问题,我们必须在较低的环境中禁用它并使用自动化进行测试。

如果有人找到正确的方法,请告诉我。

【讨论】:

以上是关于如何绕过 Google reCAPTCHA 使用 Selenium 进行测试的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Google Recaptcha v2 实施到限制访问 Google Recaptcha 的 Web 应用程序

如何在客户端验证 google recaptcha?

如何解决 Google v3 reCaptcha 超时?

如何在 vuetify 上添加 google recaptcha 3?

google recaptcha使用

如何在服务器端验证 Google reCAPTCHA v3?