如何使用Selenium和Python绕过Google的验证码?

58

如何使用Selenium和Python绕过Google CAPTCHA?

当我尝试进行网络爬虫时,Google会弹出CAPTCHA。我能否使用Selenium Python绕过Google CAPTCHA?

以Google的reCAPTCHA为例。您可以通过此链接查看此CAPTCHA:https://www.google.com/recaptcha/api2/demo


19
那么,验证码有什么意义呢? - Sin Han Jinn
我认为如果你想绕过验证码的唯一方法就是使用别人的服务。你将验证码传给他们,他们会返回给你文本。 - Sin Han Jinn
听起来更可行。我不会尝试它。可能会找到复选框元素的坐标,发送一个点击。 - Sin Han Jinn
如果它可以被机器人绕过,那么一开始拥有它的意义是什么。如果您正在测试带有验证码的应用程序,则最好暂时将其删除进行测试。 - Tek Nath Acharya
其中一些陷阱被激活是因为您重复使用相同的IP地址尝试多次。另一个原因是它可能检测到您正在使用Selenium。对于第一个问题,您可以更改IP地址。 - john
显示剩余2条评论
7个回答

66

要开始使用 Selenium 的 Python 客户端,您应该避免解决/绕过 Google CAPTCHA


Selenium

Selenium 自动化浏览器。现在,您想要利用这种能力实现的目标完全取决于个人,但主要是为了通过浏览器客户端自动化测试 Web 应用程序,当然它并不仅限于此。


CAPTCHA

另一方面,CAPTCHA (缩写为“...Completely Automated Public Turing test to tell Computers and Humans Apart...”) 是一种用于计算机中的挑战 - 响应测试,以确定用户是否为人类。

因此,Selenium 和 CAPTCHA 有两个完全不同的目的,并且理想情况下不应该用于实现任何相互关联的任务。

话虽如此,reCAPTCHA 可以很容易地检测网络流量并将您的程序识别为 Selenium 驱动的机器人。


通用解决方案

然而,有一些通用方法可以避免在 Web 抓取时被检测到:


3
请问您能详细说明一下“传统视口”是什么吗?它指的是什么? - Akshay Maldhure
2
将我的视口更改为100,100对我有用。 - Hunter Boyd
我认为HTTP cookies也很重要。如何读取、保留和何时清除它们在某些情况下可以帮助避免验证码。 - Dejan Dozet
哇...这是一个不错的步骤,我会立即尝试实现它!谢谢@undetectedSelenium,你是我的救星! - gumuruh

20
为了在爬取 Google 时绕过验证码,您必须手动解决 CAPTCHA 并导出 Google 提供给您的 cookies。现在,每次打开 Selenium WebDriver 时,请确保添加您导出的 cookies。GOOGLE_ABUSE_EXEMPTION cookie 是您要寻找的 cookie,但为了安全起见,建议保存所有 cookies。
如果您想在爬取中增加一层稳定性,可以导出几个 cookies 并让您的脚本随机选择其中一个来 ping Google。
这些 cookies 具有很长的过期日期,因此您不需要每天获取新的 cookies。
关于如何在 Python 和 Selenium 中保存和加载 cookies 的帮助,您可以查看这个答案:How to save and load cookies using Python + Selenium WebDriver

你好,我是新手使用cookies;在找到GOOGLE_ABUSE_EXEMPTION cookie后,如何使用该特定cookie?阅读了您提供的链接,但似乎它保存了上一个会话的cookie,而不是我们已经拥有的特定cookie值。 - Yu Na
嗨,Yu Na!这个链接展示了如何保存所有的cookies并且再次加载它们。我在我的代码中尝试了一下,效果非常好。如果你遇到了具体的问题,请打开一个新的SO问题,并附上你的代码示例,然后私信给我链接,这样我就可以看看是否能够帮助你 :) - Haddock-san

3

清除浏览历史记录、缓存数据、Cookies 和其他站点数据 首先在使用 Selenium 打开的浏览器窗口中创建一个 Google 帐户。 登录您的帐户。

wd.get("https://accounts.google.com/signin/v2/identifier?hl=en&passive=true&continue=https%3A%2F%2Fwww.google.com%2F%3Fgws_rd%3Dssl&ec=GAZAmgQ&flowName=GlifWebSignIn&flowEntry=ServiceLogin");
    Thread.sleep(2000);
    wd.findElement(By.name("identifier")).sendKeys("Email"+Keys.ENTER);
    Thread.sleep(3000);
    wd.findElement(By.name("password")).sendKeys("Password"+Keys.ENTER);
    Thread.sleep(5000);

然后打开任何使用reCAPTCHA勾选框的网站,使用此代码。
String framename=wd.findElement(By.tagName("iframe")).getAttribute("name");
            wd.switchTo().frame(framename);
    wd.findElement(By.xpath("//span[@id='recaptcha-anchor']")).click();

您不会找到任何谜题或其他内容。


(Note: HTML标签已保留)

1

好的,所以有一个简单的Python脚本可以为您解决验证码问题。

它基本上会读取音频,然后使用Google Assistant将其转换为文本并粘贴。

它仅适用于音频验证码,这种验证码通常在图像验证码V2中给出。

https://github.com/ohyicong/recaptcha_v2_solver

免责声明!

我并没有编写这个脚本,只是得到了这个类似的项目的灵感,所以想通过这种方式帮助其他人。


2
目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

1
我需要确认您是想解决它还是完全避免它?
要解决它: - 使用2captcha、capmonster cloud、deathbycaptcha等服务进行注册,并按照其说明操作。他们会提供一个令牌,您可以将其与表单一起传递。
要完全避免它: - 确保您的IP声誉良好(对于Cloudflare最重要)。 - 确保您有良好的浏览器指纹(对于Distil最重要)- 我推荐使用puppeteer + stealth插件。

0

虽然这个链接可能回答了问题,但最好在这里包含答案的关键部分,并提供链接作为参考。仅有链接的答案如果链接页面发生变化可能会失效。- 来自评论 - Ben A.

-3

简单的解决方案是暂停程序10秒或更长时间,然后当自动化浏览器打开时,自己解决reCAPTCHA,然后程序在10秒后开始执行其余部分,如点击提交按钮或其他操作。


这不是一个解决方案,请删除你的回答! - Sanmeet

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