如何使用 Selenium 和 Node.js 绕过验证码
在本文中,我将介绍如何使用 Selenium 和 Node.js 绕过验证码。我们将探讨使其成为可能的不同方法和现代工具,同时为任何希望克服这些挑战的开发人员提供简单实用的方法。
什么是验证码?
验证码 是 "区分计算机和人类的完全自动化公共图灵测试 "的缩写。它创造了扭曲文本、谜题和重验证码等挑战,以确保只有人类才能轻松解决。这些任务,如在图像中挑出物体或输入乱码文字,对人类来说很简单,但对机器人来说却很有挑战性。验证码可以防止自动系统访问网站或服务,保护它们免受僵尸流量的影响。
Selenium 和 Node.js
Selenium 是一种流行的浏览器自动化工具,用户可以使用它自动执行浏览器活动。借助 Node.js(一种快速、可扩展的 JavaScript 运行时),您可以创建功能强大的网络自动化脚本,与网站进行交互。
- Selenium WebDriver: 浏览器自动化工具
- Node.js: 用于处理异步任务,并将 Selenium 集成到网络扫描工作流中。
绕过验证码的分步指南
1.安装必要的工具
开始时,您需要安装 Node.js、Selenium 和浏览器驱动程序(如 ChromeDriver)。
npm install selenium-webdriver
npm install chromedriver
此外,还要安装 undetected-chromedriver,这个包可以通过让 ChromeDriver 变得不可检测来帮助绕过 CAPTCHA。
npm install undetected-chromedriver
2.使用 Node.js 设置 Selenium
安装完成后,创建一个简单的 Selenium 脚本来打开一个网站。
const { Builder, By } = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');
(async function example() {
let driver = await new Builder().forBrowser('chrome').build();
try {
await driver.get('https://example.com');
} finally {
await driver.quit();
}
})();
3.检测和处理验证码
当检测到验证码挑战时,最简单的解决方案通常是进行人机交互。但如果不能这样做呢?在以下情况下 reCAPTCHA v2您可以
使用第三方验证码解决程序:服务 Bright Data,2Captcha 或 Anti-Captcha 允许你将 CAPTCHA 求解外包给真人。阅读我的 最佳验证码解码器列表 找到满足您需求的完美服务。
npm install 2captcha
使用 2Captcha 的示例:
const TwoCaptcha = require(2captcha);
const apiKey = your_2captcha_api_key;
const captchaSolver = new TwoCaptcha(apiKey);
// Example reCAPTCHA handling
async function solveCaptcha(siteKey, pageUrl) {
return new Promise((resolve, reject) => {
captchaSolver.solveRecaptchaV2({
sitekey: siteKey、
url: pageUrl
}, (err, result) => {
if (err) reject(err);
决心(result);
});
});
}
4.使用未检测到的 ChromeDriver
有些验证码(如谷歌的 reCAPTCHA v3)会分析浏览器行为,根据浏览器指纹来检测僵尸。通过使用undetected-chromedriver,可以降低被检测为僵尸的几率。
例如
const undetectedChromedriver = require('undetected-chromedriver');
(async function example() {
const driver = await new undetectedChromedriver.Builder()
.forBrowser('chrome')
.build();
try {
await driver.get('https://example.com');
} finally {
await driver.quit();
}
})();
该工具可防止您的自动化被采用指纹识别技术的网站标记为僵尸。
5.处理高级验证码挑战
图像验证码
对于基于图像的验证码,您可能需要提取图像并使用图像识别或反验证码等验证码解决服务。更高级的选择是整合卷积神经网络 (CNN) 等机器学习技术来解决这些基于图像的验证码问题。
绕过 reCAPTCHA v3
reCAPTCHA v3 可在后台监控用户活动,并根据交互模式给出分数。有了 v3,绕过它就变得更难了,因为你不需要明确地解决任何问题,但你可以通过模仿类似人类的浏览器交互模式来欺骗评分算法。技术包括
- 随机移动鼠标指针
- 在行动之间引入小延迟
- 使用真实浏览器配置文件
async function humanLikeBehavior(driver) {
// Move the mouse randomly
await driver.actions().move({ origin: 'element', x: Math.random() * 100, y: Math.random() * 100 }).perform();
// Introduce random pauses
await driver.sleep(Math.random() * 2000 + 1000);
}
6.IP 拦截和浏览器指纹识别
许多验证码系统会跟踪试图解决验证码的用户的 IP 地址。您可以通过代理轮换 IP 地址来绕过这一点:
npm install proxy-agent
例如
const ProxyAgent = require('proxy-agent');
(async function example() {
const options = new chrome.Options().addArguments(' - proxy-server=PROXY_IP:PORT');
let driver = await new Builder().forBrowser('chrome').setChromeOptions(options).build();
try {
await driver.get('https://example.com');
} finally {
await driver.quit();
}
})();
道德与法律考虑
虽然可以绕过验证码进行测试或自动化,但了解这样做的法律和道德影响至关重要。许多网站在服务条款中明确禁止自动访问。负责任地使用自动化,尤其是在敏感领域工作时。
结论
绕过验证码是一项复杂且不断变化的挑战,但您可以通过结合 Selenium、Node.js、未检测到的 ChromeDriver 和验证码解决服务等工具来克服许多障碍。在应用这些技术时,请始终遵守法律和道德规范,确保您的自动化项目始终合规。

