Data_Journal头像

如何使用 Selenium 和 Node.js 绕过 CAPTCHA

在本文中,我将解释如何使用 Selenium 和 Node.js 绕过 CAPTCHA。我们会了解不同的方法以及能够实现这一点的现代工具,同时保持内容简单且实用,适合任何希望克服这些挑战的开发者。

什么是 CAPTCHA?

CAPTCHA 是 “Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的公开图灵测试)的缩写。它会创建诸如扭曲文本、谜题和 reCAPTCHA 等挑战,以确保只有人类能够轻松解决它们。这些任务,比如从图片中挑选物体或输入打乱的文本,对人来说很简单,但对机器人来说很有挑战。CAPTCHA 可以阻止自动化系统访问网站或服务,从而保护它们免受机器人流量的影响。

Selenium 和 Node.js

Selenium 是一种流行的浏览器自动化工具,允许用户自动执行浏览器活动。借助 Node.js 这一快速且可扩展的 JavaScript 运行时,你可以创建强大的网页自动化脚本来与网站交互。

  • Selenium WebDriver: 用于自动化浏览器的工具。

  • Node.js**:**用于处理异步任务,并将 Selenium 集成到网页抓取工作流中。

绕过 CAPTCHA 的分步指南

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. 检测和处理 CAPTCHA

当检测到 CAPTCHA 挑战时,最简单的解决方案通常涉及人工交互。但如果这不是一个可选项呢?在 reCAPTCHA v2 的情况下,你可以:

使用第三方验证码破解服务:像 Bright Data、2Captcha 或 Anti-Captcha 这样的服务允许你将 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);

resolve(result);

});

});

}

4. 使用 Undetected ChromeDriver

一些 CAPTCHA,比如 Google 的 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. 处理高级 CAPTCHA 挑战

图像 CAPTCHA

对于基于图像的 CAPTCHA,你可能需要提取图像,并使用图像识别或像 Anti-Captcha 这样的 CAPTCHA 破解服务。更高级的选择是集成卷积神经网络(CNN)等机器学习技术来解决这些基于图像的 CAPTCHA。

绕过 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 封锁和浏览器指纹识别

许多 CAPTCHA 系统会跟踪尝试解决它们的用户 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();

}

})();

伦理和法律注意事项

虽然可以为了测试或自动化而绕过 CAPTCHA,但理解这样做的法律和伦理影响至关重要。许多网站在其服务条款中明确禁止自动化访问。请负责任地使用自动化,尤其是在敏感领域工作时。

结论

绕过 CAPTCHA 是一个复杂且不断演变的挑战,但通过结合 Selenium、Node.js、undetected ChromeDriver 和 CAPTCHA 破解服务等工具,你可以克服许多障碍。在应用这些技术时,始终遵守法律和伦理边界,确保你的自动化项目保持合规。

卡住了吗?有什么地方无法正常工作?请在评论中告诉我,我会尽力提供帮助。感谢阅读!

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

  • 使用 Scrapy 进行网页抓取

  • 使用 Selenium 进行网页抓取

  • 用于网页抓取的 JavaScript 与 Python 对比

  • 使用 Python lxml 进行网页抓取

  • 使用 Excel 进行网页抓取

  • 使用 Python 进行网页抓取

  • 使用 C# 进行网页抓取

  • 抓取电商网站

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

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/Data_Journal/article/details/168142561

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--