2captcha/captcha-solver-selenium-python-examples

GitHub: 2captcha/captcha-solver-selenium-python-examples

基于 Python 和 Selenium 的验证码自动绕过示例集,集成 2Captcha 服务解决 reCAPTCHA、Cloudflare 等主流验证码类型。

Stars: 67 | Forks: 6

# 使用 Python 和 Selenium 解决验证码的代码示例 使用 Python 编程语言以及 [2captcha-python] 和 [Selenium] 库解决验证码的示例。 本代码库包含自动解决最流行验证码类型的示例,例如 [reCAPTCHA][recaptcha-v2-demo]、[Cloudflare Turnstile][cloudflare-turnstile]、[Cloudflare Challenge 页面][cloudflare-challenge]、[普通验证码][normal-captcha-demo] 等。示例中使用 Selenium 库进行浏览器自动化。使用 [2Captcha] 服务来解决验证码,因此,为了示例的正常运行,需要在 [验证码解决服务][2Captcha] 服务中拥有一个具有正余额的账户,或者您可以尝试使用 [沙盒] 模式手动解决验证码。 此外,为了使 `proxy` 示例正常工作,您需要拥有自己的 `proxy` 并在示例代码中进行设置。验证码自动解决示例使用位于 [验证码演示页面](https://2captcha.com/demo) 上的验证码。 每个示例都像一个“构造器”一样构建:代码被拆分为小而专注的函数,您可以复制并在自己的项目中独立重用它们。 我们有自己的代理可以提供给您。[购买住宅代理] 以避免限制和封锁。[快速入门]。 [2Captcha] 官方网页上的 [selenium captcha solver](https://2captcha.com/p/selenium-captcha-solver) 页面。 - [使用 Python 和 Selenium 解决验证码的代码示例](#code-examples-of-solving-captchas-in-python-using-selenium) - [使用说明](#usage) - [克隆](#clone) - [安装依赖](#install-dependencies) - [配置](#configure) - [运行](#run) - [验证码解决代码示例](#captcha-solving-code-examples) - [reCAPTCHA 示例](#recaptcha-examples) - [reCAPTCHA V2](#recaptcha-v2) - [reCAPTCHA V2 + proxy](#recaptcha-v2--proxy) - [带 callback 的 reCAPTCHA V2](#recaptcha-v2-with-callback) - [带 callback 的 reCAPTCHA V2 + proxy](#recaptcha-v2-with-callback--proxy) - [reCAPTCHA V3](#recaptcha-v3) - [reCAPTCHA V3 (扩展脚本)](#recaptcha-v3-extended-script) - [reCAPTCHA V3 + proxy](#recaptcha-v3--proxy) - [Cloudflare 示例](#cloudflare-examples) - [Cloudflare Turnstile](#cloudflare-turnstile) - [Cloudflare Challenge 页面](#cloudflare-challenge-page) - [文本验证码示例](#text-captcha-example) - [普通验证码示例](#normal-captcha-examples) - [普通验证码 (截图)](#normal-captcha-screenshot) - [普通验证码 (画布)](#normal-captcha-canvas) - [普通验证码 (画布 + 附加参数)](#normal-captcha-canvas--additional-parameters) - [坐标示例](#coordinates-example) - [MTCaptcha 示例](#mtcaptcha) - [使用 2captcha 服务解决验证码的通用算法](#general-algorithm-for-solving-captchas-using-2captcha-service) - [联系我们](#get-in-touch) - [许可证](#license) - [图形和商标](#graphics-and-trademarks) ## 使用说明 ### 克隆: ``` git clone git@github.com:2captcha/captcha-solver-selenium-python-examples.git cd captcha-solver-selenium-python-examples ``` ### 安装依赖: `pip install -r requirements.txt` ### 配置: 设置 `APIKEY_2CAPTCHA` 环境变量。您可以在您的个人 [2captcha][2captcha-enterpage] 账户中获取 `APIKEY_2CAPTCHA` 值。 `export APIKEY_2CAPTCHA=your_api_key` ### 运行: 进入示例目录并运行所需的示例。 运行 `recaptcha_v2.py` 示例: ``` cd examples/reCAPTCHA python recaptcha_v2.py ``` ## 将这些示例作为构造器使用 每种验证码类型都位于其自己的目录中,示例之间互不依赖。在每个示例中,您会发现一些小的“构建块”:用于从页面提取验证码参数、将其发送到 2Captcha API 以及在浏览器中应用接收到的答案的函数。您可以直接运行示例,也可以仅提取所需的部分并将其集成到您自己的自动化脚本中。 ## 验证码解决代码示例 下面描述了使用 Selenium 解决验证码的示例。 ### reCAPTCHA 示例 reCAPTCHA 是最流行的验证码类型之一。reCAPTCHA 有不同的类型。解决 reCAPTCHA 的方法取决于 reCAPTCHA 的类型。reCAPTCHA 分为两种类型,第一种是 reCAPTCHA V2,第二种是 reCAPTCHA V3。reCAPTCHA V3 类型的特点是验证码任务不显示,验证码独立确定用户的评分,如果检查结果评分低于要求,则无法成功通过验证码。reCAPTCHA V2 类型的特点是向用户提供通过验证码任务,例如,在显示的图像上选择所有红绿灯。 此外,还有 reCAPTCHA 的子类型,例如: - [reCAPTCHA V2 隐形][recaptcha-v2-invisible-demo] - [带 callback 的 reCAPTCHA V2][recaptcha-v2-callback-demo] - [reCAPTCHA V2 企业版][recaptcha-v2-enterprise-demo] - [reCAPTCHA V3 企业版][recaptcha-v3-enterprise-demo] 在实践中,页面上经常可以看到两种类型的 reCAPTCHA。例如 reCAPTCHA V3 和 reCAPTCHA V2。用户首先通过 reCAPTCHA V3,然后根据通过 reCAPTCHA V3 的结果,可能会向用户显示 reCAPTCHA V2 验证码。如果成功通过 reCAPTCHA V3,则不会显示 reCAPTCHA V2 验证码,如果未能通过 reCAPTCHA V3,则将向用户提供使用 reCAPTCHA V2 的额外验证。 reCAPTCHA 绕过也可能因存在附加参数(如 `data-s`)而变得复杂。示例在[文章中描述](https://2captcha.com/blog/google-search-recaptcha)。 有几种根本不同的方法来绕过 reCAPTCHA V2: - **基于 Token 的解决方案** - 在 [基于 token](https://2captcha.com/2captcha-api#solving_recaptchav2_new) 上解决 reCAPTCHA V2。在这种情况下,我们的工作人员接收发送到服务的验证码并解决它。验证码的答案是一个要应用于验证码页面的 token。 您可以在以下目录中找到使用基于 token 的方法绕过 reCAPTCHA 的示例:https://github.com/2captcha/captcha-solver-selenium-python-examples/tree/main/examples/reCAPTCHA。 - **网格** - 使用 [Grid 方法](https://2captcha.com/2captcha-api#grid) 解决 reCAPTCHA V2。在这种情况下,需要将带有验证码的源图像和验证码说明发送到服务。工作人员将接收图像并选择符合要求的象限。响应返回与发送的说明对应的象限编号。使用此方法解决验证码时,需要独立检索原始验证码图像和验证码说明。然后在收到答案后,您需要自己单击所需的方块。 此方法可以帮助绕过复杂的 reCAPTCHA 实现,例如,当很难弄清楚如何应用 token 时,或者在故意使验证码遍历复杂化的情况下。这种方法的优点是,在应用 token 时,应用 token 的内置逻辑会起作用。使用这种方式解决时,需要注意浏览器自动化的反检测,并采取措施隐藏浏览器自动化的事实。 使用 Grid 方法绕过 reCAPTCHA v2 的示例可以在代码库中找到:https://github.com/2captcha/selenium-recaptcha-solver-using-grid - **坐标** - 使用 [坐标方法](https://2captcha.com/2captcha-api#coordinates) 解决 reCAPTCHA V2。在这种情况下,需要将验证码的截图发送到服务。验证码说明可以包含在验证码图像本身中,也可以作为单独的参数发送。员工接收图像并用鼠标单击图像上的相应坐标。响应返回与发送的说明对应的点击坐标。在这种情况下,也需要独立检索图像及其说明,然后,在收到响应后,需要独立单击接收到的坐标。 此方法可以帮助绕过复杂的 reCAPTCHA 实现,例如,当很难弄清楚如何应用 token 时,或者在故意使验证码遍历复杂化的情况下。这种方法的优点是,在应用 token 时,应用 token 的内置逻辑会起作用。使用这种方式解决时,需要注意浏览器自动化的反检测,并采取措施隐藏浏览器自动化的事实。 - **音频** - 使用 [音频方法](https://2captcha.com/2captcha-api#audio) 解决 reCAPTCHA V2。对于残障人士,reCAPTCHA 具有通过音频任务通过验证码的功能。此方法可用作以前方法的替代方法。要使用此音频方法,您需要捕获包含任务的录音,然后使用 [音频方法](https://2captcha.com/2captcha-api#audio) 将录音发送到服务。响应将包含录音中包含的文本。收到响应后,您需要在页面上使用它。 #### reCAPTCHA V2 基于 Token 的 reCAPTCHA V2 解决方案。 此示例实现了绕过位于页面 https://2captcha.com/demo/recaptcha-v2 上的 reCAPTCHA V2 验证码。Selenium 库用于自动化浏览器操作。收到解决结果(token)后,脚本会自动在带有验证码的页面上使用接收到的答案。 **源代码:** [`./examples/reCAPTCAHA/recaptcha_v2.py`](./examples/reCAPTCHA/recaptcha_v2.py) #### reCAPTCHA V2 + `proxy` 基于 Token 的 reCAPTCHA V2 解决方案。 此示例实现了使用 `proxy` 绕过位于页面 https://2captcha.com/demo/recaptcha-v2 上的 reCAPTCHA V2 验证码。Selenium 库用于自动化浏览器操作。收到解决结果(token)后,脚本会自动在带有验证码的页面上使用接收到的答案。 在绕过验证码时,有时需要使用代理,在这种情况下,在加载页面和解决验证码本身时使用相同的代理非常重要。为此,您需要将使用的 `proxy` 参数与验证码参数一起传递,以便验证码从同一个 IP 地址加载和解决。 为了使示例正常工作,需要在示例代码中设置使用的 `proxy` 的值。 **源代码:** [`./examples/reCAPTCAHA/recaptcha_v2_proxy.py`](./examples/reCAPTCHA/recaptcha_v2_proxy.py) #### 带 callback 的 reCAPTCHA V2 基于 Token 的带 callback 的 reCAPTCHA V2 解决方案。 在这些示例中,实现了使用不同的实现方式绕过位于页面 https://2captcha.com/demo/recaptcha-v2-callback 上的带 callback 的 reCAPTCHA V2。Selenium 库用于自动化浏览器操作。收到解决结果(token)后,脚本会自动在带有验证码的页面上使用接收到的答案。 有时没有提交按钮,而是使用回调函数。该函数在 reCAPTCHA 解决时执行。 在此代码库中,您可以找到三个带 callback 的 reCAPTCHA V2 解决方案的示例实现: 1. [recaptcha_v2_callback_variant1.py](./examples/reCAPTCHA/recaptcha_v2_callback_variant1.py) - `sitekey` 参数的值是从页面代码中自动提取的。`callback` 函数 “`verifyDemoRecaptcha()`” 的值是手动指定的。在另一个页面上绕过验证码时,“`verifyDemoRecaptcha()`” 函数的名称可能会有所不同。您需要自己弄清楚 `callback` 函数的名称并在代码中指定它。 **源代码:** [`./examples/reCAPTCAHA/recaptcha_v2_callback_variant1.py`](./examples/reCAPTCHA/recaptcha_v2_callback_variant1.py) 2. [recaptcha_v2_callback_variant2.py](./examples/reCAPTCHA/recaptcha_v2_callback_variant2.py) - 验证码参数是在页面上执行的 JavaScript 脚本的帮助下自动确定的。 **源代码:** [`./examples/reCAPTCAHA/recaptcha_v2_callback_variant2.py`](./examples/reCAPTCHA/recaptcha_v2_callback_variant2.py) 3. [recaptcha_v2_callback_proxy.py](./examples/reCAPTCHA/recaptcha_v2_callback_proxy.py) - [此示例在下面描述](#recaptcha-v2-with-callback--proxy)。 **源代码:** [`./examples/reCAPTCAHA/recaptcha_v2_callback_proxy.py`](./examples/reCAPTCHA/recaptcha_v2_callback_proxy.py) #### 带 callback 的 reCAPTCHA V2 + proxy 使用代理的基于 Token 的带 callback 的 reCAPTCHA V2 解决方案。 在这些示例中,实现了使用代理绕过位于页面 https://2captcha.com/demo/recaptcha-v2-callback 上的带 callback 的 reCAPTCHA V2。Selenium 库用于自动化浏览器操作。收到解决结果(token)后,脚本会自动在带有验证码的页面上使用接收到的答案。 为了使示例正常工作,需要在示例代码中设置使用的 `proxy` 的值。 **源代码:** [`./examples/reCAPTCAHA/recaptcha_v2_callback_proxy.py`](./examples/reCAPTCHA/recaptcha_v2_callback_proxy.py) #### reCAPTCHA v3 基于 Token 的 reCAPTCHA V3 解决方案。 此示例演示了绕过页面 https://2captcha.com/demo/recaptcha-v3 上的 reCAPTCHA V3 验证。Selenium 库自动化浏览器交互。验证码参数是在页面上执行的 JavaScript 脚本的帮助下自动确定的。获得解决方(token)后,脚本会以编程方式将响应应用于验证码页面。 **源代码:** [`./examples/reCAPTCAHA/recaptcha_v3.py`](./examples/reCAPTCHA/recaptcha_v3.py) #### reCAPTCHA v3 (扩展脚本) 基于 Token 的 reCAPTCHA V3 解决方案。 此示例演示了绕过页面 https://2captcha.com/demo/recaptcha-v3 上的 reCAPTCHA V3 验证。Selenium 库自动化浏览器交互。验证码参数是在页面上执行的 JavaScript 扩展脚本的帮助下自动确定的。获得解决方(token)后,脚本会以编程方式将响应应用于验证码页面。 **源代码:** [`./examples/reCAPTCAHA/recaptcha_v3_extended_js_script.py`](./examples/reCAPTCHA/recaptcha_v3_extended_js_script.py) #### reCAPTCHA v3 + proxy 使用代理基于 Token 的 reCAPTCHA V3 解决方案。 此示例演示了绕过页面 https://2captcha.com/demo/recaptcha-v3 上的 reCAPTCHA V3 验证。Selenium 库自动化浏览器交互。验证码参数是通过页面上的 JavaScript 脚本自动确定的。获得解决方(token)后,脚本会以编程方式将响应应用于验证码页面。在验证码解决过程中使用了代理。 为了使示例正常工作,需要在示例代码中设置使用的 `proxy` 的值。 **源代码:** [`./examples/reCAPTCAHA/recaptcha_v3_proxy.py`](./examples/reCAPTCHA/recaptcha_v3_proxy.py) ### Cloudflare 示例 Cloudflare 是最流行的验证码类型之一。Cloudflare 有两种类型。第一种是 [Cloudflare Turnstile][cloudflare-turnstile],第二种是 [Cloudflare challenge][cloudflare-challenge] 页面。 - [Cloudflare Turnstile][cloudflare-turnstile] - 在这种情况下,验证码显示在目标页面上,验证码徽章嵌入在目标页面代码中。实现示例如页面 https://2captcha.com/demo/cloudflare-turnstile 所示。 - [Cloudflare challenge][cloudflare-challenge] - 在这种情况下,将重定向到验证页面以通过验证码,如此处实现的 https://2captcha.com/demo/cloudflare-turnstile-challenge。 绕过这两种类型的方法是不同的,因此您需要确定您面对的是哪种类型的 Cloudflare。在下面阅读更多关于绕过 Cloudflare 验证码类型的信息。 #### Cloudflare Turnstile 基于 Token 的 Cloudflare Turnstile 解决方案。 此示例演示了如何绕过位于页面 https://2captcha.com/demo/cloudflare-turnstile 上的 Cloudflare Turnstile CAPTCHA。Selenium 库用于自动化浏览器操作并检索 CAPTCHA 参数。要解决此类型的 Cloudflare CAPTCHA,需要将 `pageurl` 和 `sitekey` 等参数发送到 [2Captcha API](https://2captcha.com/2captcha-api#turnstile)。收到解决结果(token)后,脚本会自动在页面上使用接收到的答案。 **源代码:** [`./examples/cloudflare/cloudflare_turnstile.py`](./examples/cloudflare/cloudflare_turnstile.py) #### Cloudflare Challenge 页面 基于 Token 的 Cloudflare Challenge 页面解决方案。 此示例演示了如何绕过位于页面 https://2captcha.com/demo/cloudflare-turnstile-challenge 上的 Cloudflare Challenge。Selenium 库用于自动化浏览器操作并检索 CAPTCHA 参数。要解决此类型的 Cloudflare CAPTCHA,需要将 `pageurl`、`sitekey`、`action`、`data`、`pagedata`、`useragent` 等参数发送到 [2Captcha API](https://2captcha.com/2captcha-api#turnstile)。收到解决结果(token)后,脚本会自动在页面上使用接收到的答案。 **源代码:** [`./examples/cloudflare/cloudflare_challenge_page.py`](./examples/cloudflare/cloudflare_challenge_page.py) ### 文本验证码示例 文本验证码解决方案。 在这些示例中,实现了绕过位于页面 https://2captcha.com/demo/text 上的文本验证码。Selenium 库用于自动化浏览器操作。收到解决结果(token)后,脚本会自动在带有验证码的页面上使用接收到的答案。 **源代码:** [`./examples/text_captcha/text_captcha.py`](./examples/text_captcha/text_captcha.py) ### 普通验证码示例 普通验证码也是最流行的验证码类型之一。下面是普通验证码解决方案的两个示例。示例的区别在于从页面提取验证码图像的方式。 #### 普通验证码 (截图) 普通验证码解决方案。 在这些示例中,实现了绕过位于页面 https://2captcha.com/demo/normal 上的普通验证码。Selenium 库用于自动化浏览器操作。收到解决结果后,脚本会自动在带有验证码的页面上使用接收到的答案。在此示例中,通过创建验证码图像的截图来检索验证码图像。 **源代码:** [`./examples/normal_captcha/normal_captcha_screenshot.py`](./examples/normal_captcha/normal_captcha_screenshot.py) #### 普通验证码 (画布) 普通验证码解决方案。 在这些示例中,实现了绕过位于页面 https://2captcha.com/demo/normal 上的普通验证码。Selenium 库用于自动化浏览器操作。收到解决结果后,脚本会自动在带有验证码的页面上使用接收到的答案。在此示例中,使用 `canvas` 提取验证码图像。 **源代码:** [`./examples/normal_captcha/normal_captcha_canvas.py`](./examples/normal_captcha/normal_captcha_canvas.py) #### 普通验证码 (截图 + 附加参数) 使用附加参数的普通验证码解决方案。 在这些示例中,实现了绕过位于页面 https://2captcha.com/demo/normal 上的普通验证码。Selenium 库用于自动化浏览器操作。验证码是使用附加参数发送的,例如 `numeric`、`minLen`、`maxLen`、`lang`。发送附加参数允许您提高验证码解决的准确性。收到解决结果后,脚本会自动在带有验证码的页面上使用接收到的答案。在此示例中,通过创建验证码图像的截图来检索验证码图像。 **源代码:** [`./examples/normal_captcha/normal_captcha_screenshot_params.py`](./examples/normal_captcha/normal_captcha_screenshot_params.py) ### 坐标示例 坐标验证码是一种验证码,您需要在其中根据图像说明单击图像。此示例实现了绕过位于页面 https://2captcha.com/demo/clickcaptcha 上的坐标验证码。Selenium 库用于自动化浏览器操作。收到解决结果后,脚本会自动单击验证码图像上接收到的坐标。 **源代码:** [`./examples/coordinates/coordinates.py`](./examples/coordinates/coordinates.py) ### MTCaptcha 基于 Token 的 MTCaptcha 解决方案。 在这些示例中,我们演示了绕过位于页面 https://2captcha.com/demo/mtcaptcha 上的 MTCaptcha。Selenium 库用于自动化浏览器操作。收到解决结果(token)后,脚本会自动在包含验证码的页面上应用获得的答案。 **源代码:** [`./examples/mtcaptcha/mtcaptcha.py`](./examples/mtcaptcha/mtcaptcha.py) ## 使用 [2captcha] 服务解决验证码的通用算法 借助 2captcha 服务绕过验证码的过程可以分为几个主要阶段: 1. **识别目标页面上的验证码类型。** 您需要确定目标页面上位于什么类型的验证码。通常,这并不困难,因为验证码通常清楚地显示在页面上。在更复杂的情况下,页面上可能有多种类型的验证码,或者验证码可能不会立即显示,而是在某些操作之后显示。 您可以尝试使用 [2captcha-detector] 工具来简化页面上的验证码搜索。 2. **搜索验证码参数。** 确定需要解决的验证码类型后,需要在文档中找到此验证码类型的强制参数列表。接下来,您需要在目标页面上找到这些验证码参数。 这些验证码参数大多是静态的,但在某些情况下它们是动态的。如果您有动态验证码参数,则每次接收验证码时都需要获取新值,API 文档中对此进行了更详细的描述。 3. **将验证码发送到 2Captcha API。** 成功定义验证码参数后,您需要将验证码参数发送到 API [2captcha]。在成功的情况下,响应中将返回验证码 id,这意味着验证码已成功传递给工作人员进行解决。 如果验证码参数发送正确,工作人员将解决您发送的验证码,您将能够使用接收到的验证码 id 获取验证码答案。 如果由于某种原因无法解决验证码,您将收到描述错误的答案而不是解决方案。 在示例中,使用 [2captcha-python] 库与 [2Captcha] API 进行交互。还有用于其他编程语言的官方库。 官方库列表: - [2captcha-python] - [2captcha-javascript] - [2captcha-java] - [2captcha-csharp] - [2captcha-php] - [2captcha-go] - [2captcha-ruby] - [2captcha-cpp] 4. **获取验证码响应。** 使用在上一步中获得的验证码 id 获取验证码解决方案。 5. **使用验证码答案。** 收到验证码解决方案后,您需要在目标页面上正确使用验证码解决方案。文档和 [演示页面][2captcha-demo] 中描述了使用解决方案的标准方法。 如果标准方法不起作用,您需要弄清楚解决方案在页面上是如何使用的。为此,请尝试手动解决验证码并了解验证码答案在页面上是如何使用的。 ## 联系我们 ## 许可证 此代码库中的代码是根据 MIT 许可证授权的。有关更多详细信息,请参阅 [LICENSE](./LICENSE) 文件。 ### 图形和商标 此代码库中包含的图形和商标不受 MIT 许可证的保护。有关使用这些材料的许可,请联系 support
标签:2Captcha, Cloudflare Turnstile, Python, reCAPTCHA, RPA, Selenium, Web爬虫, Web自动化, 代理, 反爬虫绕过, 命令控制, 安全测试, 攻击性安全, 数据采集, 无后门, 无文件攻击, 浏览器自动化, 示例代码, 逆向工具, 验证码破解, 验证码识别