如何在 Java 中使用 Selenium 绕过 CAPTCHA

我发现了一些技巧,可以在自动化操作时减少处理 CAPTCHA 的麻烦。无论是使用 Selenium 还是其他工具,这些策略都能提高你越过这道障碍的机会。目标并不是破解系统,而是在涉及 CAPTCHA 时,让自动化变得不那么复杂、耗时。让我们深入了解这些选项。

了解 CAPTCHA 及其类型

在深入探讨绕过策略之前,有必要先了解 CAPTCHA 有多种形式:

  • 基于文本的 CAPTCHA:需要识别扭曲的文字。

  • 基于图片的 CAPTCHA:需要在一组图片中选择特定对象。

  • ReCAPTCHA v2 和 v3:Google 的 CAPTCHA 依赖用户行为来区分真人与机器人。

绕过 CAPTCHA 并不简单,因为网站会不断演进以检测机器人。因此,以下方法可以在某些场景中提供帮助。

简单的 CAPTCHA 解决方案

在我们深入了解如何在 Java 中用 Selenium 处理 CAPTCHA 之前,我想先介绍一些目前可用的最佳验证码破解服务。你可以在这里阅读顶级 CAPTCHA 破解服务。

如果不想读完整篇内容,这里是最终列表:

  1. Bright Data 验证码破解 --- 强大的基于代理的破解工具;能够以高准确率处理复杂的 CAPTCHA。

  2. BypassCaptcha --- 集成简单;支持多种语言和 reCAPTCHA 处理。

  3. 2captcha --- 人工驱动的服务;支持多种 CAPTCHA,且成本效益高。

  4. CapSolver --- 高速破解工具,适合大量 CAPTCHA 需求,价格实惠。

  5. Anticaptcha --- 响应迅速,并拥有全球人工解题人员;对 reCAPTCHA 很有效。

  6. Best 验证码破解 --- 基于人工的解决方案,提供 24/7 支持;以结果可靠而闻名。

Selenium 和 Java 能处理 CAPTCHA 吗?

Selenium Java 可以处理 CAPTCHA,但具体方式取决于网站。有些网站只会在检测到可疑的机器人活动时显示 CAPTCHA 挑战,而另一些网站则会立即使用 CAPTCHA 来阻止自动化访问。

在第一种情况下,你可以通过模拟自然浏览行为来保持低调,从而避免 CAPTCHA。在第二种情况下,则需要由真人来解决 CAPTCHA。

虽然 Selenium 可以用于这两种情况,但要稳定、规模化地解决 CAPTCHA 具有挑战性。因此,更有效的做法是从一开始就尽量防止 CAPTCHA 出现。接下来我们看看在使用 Selenium 进行自动化时如何避免这些挑战。

方法 1:使用反 CAPTCHA 服务

较常见的方法之一是使用第三方反 CAPTCHA 服务,例如:

  • 2Captcha

  • AntiCaptcha

  • DeathByCaptcha

这些服务使用 API 将 CAPTCHA 挑战发送给人工解题人员来完成破解。将这些服务与 Java 中的 Selenium 集成非常直接。下面是一个简单的代码片段:

// Import required libraries

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.chrome.ChromeDriver;

public class BypassCaptcha {

public static void main(String\[\] args) {

System.setProperty("webdriver.chrome.driver", "path_to_chromedriver");

WebDriver driver = new ChromeDriver();

driver.get("https://www.example.com/captcha");

// Assume the CAPTCHA image is here and requires solving

// Send CAPTCHA image to a third-party CAPTCHA-solving service API

String captchaSolution = callCaptchaService(driver);

// Input solved CAPTCHA into the webpage

driver.findElement(By.id("captchaInput")).sendKeys(captchaSolution);

driver.findElement(By.id("submit")).click();

}

private static String callCaptchaService(WebDriver driver) {

// Example API call to a CAPTCHA-solving service

// Logic to send CAPTCHA image, receive solution, and return it

return "solvedCaptcha";

}

}

方法 2:使用 Undetected Chromedriver

Selenium 机器人经常会被 CAPTCHA 脚本检测到,尤其是在 Google reCAPTCHA 场景下。使用不易被检测到的 WebDriver,例如 Undetected ChromeDriver,可以绕过网站用来识别 Selenium 的部分检测机制。

集成方式如下:

  • 下载 undetected ChromeDriver。

  • 用它替代默认的 WebDriver。

示例:

System.setProperty("webdriver.chrome.driver", "path_to_undetected_chromedriver");

WebDriver driver = new ChromeDriver();

// Continue with your usual automation steps

这种方法之所以有效,是因为一些 CAPTCHA 会追踪用户行为(鼠标移动、输入速度),而不易被检测到的 WebDriver 会模拟更自然的用户交互。

有些网站允许每个会话只解决一次 CAPTCHA。你可以手动解决一次 CAPTCHA,保存该会话的 Cookie,并在后续 Selenium 会话中复用这些 Cookie。

具体做法如下:

Set<Cookie> cookies = driver.manage().getCookies();

// Save cookies to a file

saveCookiesToFile(cookies);

// Later, load cookies back

for(Cookie cookie : loadCookiesFromFile()) {

driver.manage().addCookie(cookie);

}

在未来的会话中,你可以使用已验证会话中的 Cookie 来绕过 CAPTCHA。

方法 4:使用具有人类式交互的浏览器自动化

有些 CAPTCHA 依赖对用户交互的分析。像 Selenium Stealth 这样的工具可以帮助模拟类似人类的行为,从而降低触发 CAPTCHA 的可能性。

这包括模拟:

  • 自然的鼠标移动。

  • 操作之间的随机延迟。

  • 滚动和页面交互。

结论

绕过 CAPTCHA 是一个复杂且不断演变的挑战。虽然上述方法可以帮助减少基于 Selenium 的 Java 自动化中的 CAPTCHA 干扰,但必须记住,CAPTCHA 的设计目的就是防止自动化。尊重网站的政策和服务条款,对于保持负责任的做法至关重要。

有任何问题吗?期待你的评论!

对其他网页抓取指南感兴趣?

  • 使用 Scrapy 进行网页抓取

  • 使用 Selenium 进行网页抓取

  • JavaScript 与 Python 在网页抓取中的对比

  • 使用 Python lxml 进行网页抓取

  • 使用 Excel 进行网页抓取

  • 使用 Python 进行网页抓取

  • 使用 C# 进行网页抓取

如需阅读其他精彩文章,请访问我的个人主页 --- Data Journal ❤️

相关推荐
天天被压力15 分钟前
【A股分钟级高频数据完全手册 #09】A股历史分时交易数据接口:普通分时怎么批量下
java·人工智能·python
天天被压力23 分钟前
【A股分钟级高频数据完全手册 #10】股票实时行情数据接口Python:公开源实时交易取数
java·人工智能·python
apcipot_rain42 分钟前
C++转Java日记(05)
java·开发语言·c++
CoderYanger6 小时前
Java EE 进阶:8.MyBatis 操作数据库(入门)(第二弹)
java·数据库·spring boot·spring·面试·java-ee·mybatis
CQU_JIAKE8 小时前
11.7[高体】
java·后端·spring
apcipot_rain9 小时前
C++转Java日记(04)
java·开发语言·c++
特立独行的猫A10 小时前
我给女儿写了个打字练习:一边敲键盘,一边把小学英语单词记牢
java·后端·python
憧憬成为java架构高手的小白12 小时前
LangGraph4j 实战(下)
java
天诰12 小时前
SA-K-11 检索会消失吗与四个未解问题
java·服务器·人工智能·python·机器学习·ai编程
这个昵称不容易15 小时前
SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在
java·springboot·毕设