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

Posted

技术标签:

【中文标题】如何使用 Selenium 和 Python 绕过 Google 验证码?【英文标题】:How can I bypass the Google CAPTCHA with Selenium and Python? 【发布时间】:2020-03-11 08:05:08 【问题描述】:

当我尝试抓取某些内容时,Google 会给我一个验证码。我可以使用 Selenium Python 绕过 Google 验证码吗?

例如,它是 Google reCAPTCHA。您可以通过此链接查看此验证码:https://www.google.com/recaptcha/api2/demo

【问题讨论】:

嗯.. 那么验证码有什么意义呢? 我认为如果你想绕过验证码,唯一的方法就是使用别人的服务。您将验证码传递给他们,他们将文本返回给您。 听起来更可行。我不打算尝试。大概找到checkbox元素的坐标,发送点击。 但是,您首先是如何获得验证码的?你的某些行为一定让谷歌认为你是机器人。 @HjSin 谢谢关注 能否请给我答案,以便我更好地理解 【参考方案1】:

好的,所以有一个简单的python脚本可以为你解决验证码。

它基本上是读取音频,然后使用谷歌助手将其转换为文本并粘贴。

它仅适用于音频验证码,而 imahe 验证码 V2 的情况最多

https://www.google.com/url?sa=t&source=web&rct=j&url=https://github.com/ohyicong/recaptcha_v2_solver&ved=2ahUKEwjG_Z2g-8f1AhUCdBQKHdIiANwQFnoECAUQAQ&usg=AOvVaw3dkyBTmAmjHqLRZoTzxNG8

免责声明!

我不写脚本,我只是想这样做,但得到了这个兄弟项目,想帮助别人完成这个。

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。【参考方案2】:

像解决它一样绕过还是像根本没有得到它一样绕过?

解决它:

注册 2captcha、capmonster cloud、deathbycaptcha 等,并按照他们的指示进行操作。他们会给你一个令牌,你通过表格传递。

永远不会得到它:

确保您拥有良好的 IP 声誉(对于 Cloudflare 来说最重要)。 确保您拥有良好的浏览器指纹(对 Distil 来说最重要)- 我推荐 puppeteer + 隐身插件。

【讨论】:

【参考方案3】:

验证码是为了避免那些自动化的机器人。你可以手动解决验证码,你可以继续工作。 像这样:

import time
from time import sleep

time.sleep (60)
dus = input ('Did you solve the captcha? 1 for yes 2 for no :')

if dus == 1 :
      continue

else :
      time.sleep (60)
      tdus = input ('Did you solve the captcha? 1 for yes 2 for 
      no :')

      if tdus == 1 :
        continue
       
      else :
         exit

【讨论】:

我看不到你的意思。【参考方案4】:

简单的解决方案是暂停程序 10 秒或更长时间,然后在自动浏览器打开时自行解决 reCAPTCHA,然后程序在 10 秒后启动并执行程序的其余部分,例如点击提交按钮或其他东西

【讨论】:

【参考方案5】:

清除浏览历史、缓存数据、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();

你不会找到任何谜题或任何东西。

【讨论】:

【参考方案6】:

为了在抓取 Google 时绕过验证码,您必须手动解决验证码并导出 Google 提供给您的 cookie。现在,每次打开 Selenium WebDriver 时,请确保添加导出的 cookie。 GOOGLE_ABUSE_EXEMPTION cookie 是您要查找的,但为了安全起见,我会保存所有 cookie。

如果您希望在您的抓取中增加一层稳定性,您应该导出多个 cookie,并让您的脚本在每次 ping Google 时随机选择其中一个。

这些 cookie 的有效期很长,因此您无需每天都获取新的 cookie。

有关在 Python 和 Selenium 中保存和加载 cookie 的帮助,您应该查看以下答案:How to save and load cookies using Python + Selenium WebDriver

【讨论】:

您好,我刚开始使用cookies;找到 GOOGLE_ABUSE_EXEMPTION cookie 后,您如何使用该特定 cookie?阅读您提供的链接,但这似乎保存了上一个会话的 cookie,而不是我们已经拥有的特定 cookie 值 你好,于娜!该链接显示了如何保存所有 cookie 然后加载它们。我在我的代码中尝试了它,它就像一个魅力。如果您遇到了特定的障碍,请使用您的代码示例打开一个新的 SO 问题并将链接发给我,以便我可以帮助您:)【参考方案7】:

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


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


验证码

另一方面,CAPTCHA(首字母缩写词是...完全自动化的公共图灵测试,以区分计算机和人类...)是一种挑战-响应测试,用于计算以确定用户是否是人类。

因此,SeleniumCAPTCHA 服务于两个完全不同的目的,理想情况下不应该用于完成任何相互关联的任务。

话虽如此,reCAPTCHA 可以轻松检测网络流量并将您的程序识别为 Selenium 驱动的 bot


通用解决方案

但是,有一些通用方法可以避免在网页抓取时被检测到:

网站可以确定您的脚本/程序的首要属性是您的显示器大小。所以建议不要使用常规的Viewport。 如果您需要向网站发送多个请求,请继续更改每个请求的用户代理。在这里您可以找到关于 Way to change Google Chrome user agent in Selenium? 的详细讨论 要模拟 类人 行为,您可能需要减慢脚本执行速度,甚至超过WebDriverWait 和expected_conditions 诱导time.sleep(secs)。在这里您可以找到关于 How to sleep Selenium WebDriver in Python for milliseconds 的详细讨论

这个用例

但是,在几个用例中,我们能够使用 Selenium 与 reCAPTCHA 进行交互,您可以在以下讨论中找到更多详细信息:

How to click on the reCAPTCHA using Selenium and Java CSS selector for reCAPTCHA checkbok using Selenium and VBA Excel Find the reCAPTCHA element and click on it — Python + Selenium

参考文献

您可以在以下位置找到一些相关的讨论:

How can I make a Selenium script undetectable using GeckoDriver and Firefox through Python? Is there a version of Selenium WebDriver that is not detectable?

tl;博士

How does reCAPTCHA 3 know I'm using Selenium/chromedriver?

【讨论】:

您能否详细说明“常规视口”?它指的是什么?

以上是关于如何使用 Selenium 和 Python 绕过 Google 验证码?的主要内容,如果未能解决你的问题,请参考以下文章

selenium:python如何绕过登录页面登录网页

Selenium+Python自动化之如何绕过登录验证码

Python Selenium Cookie 绕过验证码实现登录

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

Selenium2+python自动化41-绕过验证码(add_cookie)

Selenium2+python自动化41-绕过验证码(add_cookie)