如何在 Java 中使用 Selenium 绕过验证码
我发现了一些小窍门,可以减少处理以下问题时的麻烦 验证码 同时实现自动化。无论是使用 Selenium 或其他工具,这些策略可以提高您过关的几率。我们的目标不是破坏系统,而是在涉及验证码时,降低自动化的复杂性和耗时。让我们深入了解这些选项。
了解验证码及其类型
在深入研究旁路策略之前,有必要了解验证码有多种形式:
- 基于文本的验证码 要求解决文字扭曲问题。
- 基于图像的验证码 要求在一组图像中选择某些对象。
- ReCAPTCHA v2 和 v3: 谷歌的 CAPTCHAs 依靠用户行为来验证人类和机器人。
随着网站不断发展以检测机器人,绕过验证码并非易事。因此,以下方法可以在某些情况下提供帮助。
简易验证码解决方案
在我们深入探讨如何在 Java 中使用 Selenium 处理验证码之前,我想先介绍一些目前最好的验证码解决服务。您可以 在此阅读有关顶级验证码解决服务的信息.
跳过冗长的阅读,以下是最终名单:
- Bright Data 验证码解码器 - 基于代理的强大解码器;可高精度处理复杂的验证码。
- BypassCaptcha - 集成简单;支持多种语言和 reCAPTCHA 处理。
- 2captcha - 人工服务;支持多种验证码,具有成本效益。
- CapSolver - 高速解码器,价格合理,可满足大量验证码需求。
- Anticaptcha - 快速响应和全球人工解码器;对 reCAPTCHA 有效。
- Best Captcha Solver - 以人为本的解决方案,提供 24/7 全天候支持;以结果可靠而著称。
Selenium 和 Java 能否处理验证码?
Selenium Java 可以处理验证码,但如何处理取决于网站。有些网站只有在检测到可疑的僵尸活动时才会显示验证码挑战,而有些网站则会立即使用验证码来阻止自动访问。
在第一种情况下,您可以通过模仿自然浏览行为来避开验证码,从而不被发现。在第二种情况下,需要由人工来解决验证码问题。
虽然 Selenium 可用于这两种情况,但要持续解决验证码问题却很难扩展。因此,更有效的方法是首先防止验证码出现。让我们来探讨如何在使用 Selenium 进行自动化时避免这些挑战。
方法 1:使用反验证码服务
比较常见的一种方法是使用第三方反验证码服务,如
- 2Captcha
- 反验证码
- 验证码之死
这些服务使用应用程序接口(API),通过将验证码发送给人工解码器来解决验证码难题。在 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_too_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:使用未检测到的色度驱动程序
Selenium 机器人经常会被验证码脚本检测到,尤其是 Google reCAPTCHA。使用未检测到的 WebDriver,如 未检测到的 ChromeDriver它允许绕过网站用于识别 Selenium 的某些检测机制。
将其整合:
- 下载未检测到的 ChromeDriver。
- 用它代替默认 WebDriver。
例如
System.setProperty("webdriver.chrome.driver", "path_to_undetected_chromedriver");
WebDriver driver = new ChromeDriver();
// Continue with your usual automation steps
这种方法之所以有效,是因为有些验证码会跟踪用户行为(鼠标移动、键入速度),而未检测到的 WebDriver 会模仿更自然的用户交互。
方法 3:通过收集 Cookie 预先解决验证码问题
有些网站允许每个会话只解决一次验证码问题。您可以手动解决一次验证码,保存会话的 cookie,并在后续 Selenium 会话中重复使用这些 cookie。
方法如下
Set cookies = driver.manage().getCookies();
// Save cookies to a file
saveCookiesToFile(cookies);
// Later, load cookies back
for(Cookie cookie : loadCookiesFromFile()) {
driver.manage().addCookie(cookie);
}
在以后的会话中,您可以使用已验证会话中的 cookies 绕过验证码。
方法 4:使用浏览器自动化与类人互动
有些验证码取决于对用户交互的分析。这些工具包括 Selenium Stealth 有助于模拟类似人类的行为,减少验证码被触发的几率。
这包括模仿:
- 自然的鼠标移动
- 行动之间的随机延迟
- 滚动和页面交互
结论
绕过验证码是一项复杂且不断变化的挑战。虽然上述方法有助于减少验证码对基于 Selenium 的 Java 自动化的干扰,但必须记住,验证码的目的是防止自动化。尊重网站的政策和服务条款对于保持负责任的态度至关重要。