用于网络抓取的 puppeteer-humanize

如何使用 puppeteer-humanize 进行网络抓取

在本指南中,我将指导您如何设置 人化 使用它,并讨论它的局限性--以及什么时候应该改用其他工具,如 Bright Data.

什么是 puppeteer-humanize?

Puppeteer-humanize 是一种 Node.js 库,可让使用 Puppeteer 时的输入行为看起来更人性化。它不会改变你的整个浏览器行为,但会改善你的机器人填写文本输入的方式,例如登录表单上的用户名和密码。

下面是木偶人化的作用:

  • 用随机延迟键入字符
  • 输入时添加错误,并使用退格键纠正错误
  • 模拟空格键行为
  • 让填表看起来更像人类

为什么网站会检测到 Puppeteer?

使用 Puppeteer 时,你是在用代码控制浏览器。这会导致网站很容易检测到的模式。一些类似僵尸行为的例子包括

  • 打字速度始终如一
  • 无打字错误
  • 即时点击元素
  • 光标移动不自然
  • 按固定步长滚动
  • 对弹出窗口或动态变化无响应

即使您已登录或使用代理,反僵尸系统也会利用这些信号阻止您的刮擦程序。因此,让你的自动化行为更像一个真实的人非常重要。

安装 puppeteer-humanize

要使用 puppeteer-humanize,你需要将它与 Puppeteer Extra 和一个有助于减少检测的隐形插件一起安装。

下面介绍如何安装所有设备:

npm install @forad/puppeteer-humanize puppeteer-extra puppeteer-extra-plugin-stealth
  • @forad/puppeteer-humanize: 打字行为增强器
  • puppeteer-extra:允许使用插件的 Puppeteer 封装器
  • puppeteer-extra-plugin-stealth:隐藏 Puppeteer 的指纹

设置爬虫

让我们构建一个简单的 scraper,访问登录页面并使用 puppeteer-humanize 输入凭据。

创建一个名为 scraper.js 的文件:

const { typeInto } = require(@forad/puppeteer-humanize);
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require(puppeteer-extra-plugin-stealth);
puppeteer.use(StealthPlugin());

现在,我们将启动浏览器并导航到登录表单:

(async () => {
try {
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
await page.goto('https://www.scrapingcourse.com/login/cf-turnstile');
const emailInput = await page.$(#email);
const passwordInput = await page.$(#password);
const submitButton = await page.$(#submit-button' (提交按钮);
if (emailInput && passwordInput) {
const config = {
错误{
chance: 8,
延迟:{
分钟: 50,
最大: 500,
},
},
延迟:{
space:{
chance: 70,
分钟: 10,
最大: 50,
},
},
};
await typeInto(emailInput、 '[email protected]'配置);
await typeInto(passwordInput、 密码123配置);
await page.waitForTimeout(2000); // 模拟思考时间
await submitButton.click();
await page.screenshot({ path: 'screenshot.png' });
} else {
console.log(一个或多个表单字段未找到。);
}
await browser.close();
} catch (error) {
console.error(错误:,错误);
}
})();

了解配置

传递给 typeInto() 的配置对象定义了打字的人性化程度。

错误

设置脚本打错字的频率。

错误:{
机会 8, // 8% 出错几率
延迟{ 分钟: 50, 最大: 500 }// 校正前的延迟
}

机器人会像人类一样输入错误的字母,并使用退格键进行更正。

延迟

这可以控制字符之间的延迟,尤其是空格:

延迟:{
space:{
机会 70,
分钟: 10,
最大: 50,
}
}

当您按空格键或在单词之间移动时,这将模拟暂停。

截图和结果

运行脚本后,将保存显示已填写表格的截图。如果网站有简单的僵尸检测,puppeteer-humanize 可能就足以通过。

不过,在更高级的反僵尸网站上,比如那些使用 Cloudflare 或 Turnstile,您的刮擦程序仍可能被阻止。这是因为 puppeteer-humanize 只能改进输入,而不能改进浏览器指纹、IP 行为或 JavaScript 挑战。

常见问题与修复

问题:找不到选择器

使用 DevTools 检查网站结构。确保输入和按钮的 ID 或类正确无误。

问题:被验证码阻止

Puppeteer-humanize 无法解决验证码问题。您可以尝试使用外部服务来解决它们,例如 2Captcha 或 Bright Data 的验证码解码器但这增加了复杂性。

问题:人性化输入后仍受阻

这意味着网站使用了更先进的方法,如浏览器指纹识别、IP 跟踪或画布检测。你需要的不仅仅是木偶人化。

puppeteer-humanize 的局限性

虽然 puppeteer-humanize 非常有用,但它并不是一个完整的反机器人解决方案。以下是一些主要限制:

  1. 有限范围
    它只能模拟打字。它对鼠标移动、滚动或与弹出窗口交互没有帮助。
  2. 过时
    程序库已经多年没有更新了。新的反机器人技术正在开发中,"傀儡人性化 "可能已经不够用了。
  3. 无 IP 保护
    puppeteer-humanize 不会隐藏或旋转您的 IP。
  4. 无指纹欺骗
    它不会改变浏览器的指纹。网站仍然知道他们在与机器人打交道。
  5. 无法应对 JavaScript 挑战
    如果网站使用 JavaScript 拼图或安全检查,您的刮擦工具可能无法加载页面。

更好的方法:使用 Bright Data 或其他代理提供商

需要在具有高级保护的网站上工作的搜刮者应考虑使用 Bright Data(前身为 Luminati)。Bright Data 是一家高级代理提供商和刮擦基础设施公司。它提供

  • 来自数百万个地点的住宅和移动 IP
  • 浏览器指纹保护
  • 会话管理
  • 内置验证码解决方案
  • JavaScript 渲染

想了解其他供应商?查看我的 最佳代理供应商.

使用 Bright Data 的简单示例

const puppeteer = require(product_titles:);
(async () => {
const browser = await puppeteer.launch({
headless: true,
args: [
' - proxy-server=http://:@brd.superproxy.io:33335',
],
});
const page = await browser.newPage();
await page.goto('https://example.com');
const content = await page.content();
console.log(content);
await browser.close();
})();

用您的 Bright Data 凭据替换和。这样,您就可以访问真实的 IP 地址,有助于绕过地理封锁和指纹检测。

结论

Puppeteer-humanize 是一款有用的工具,能让你的网络搜索器像真人一样打字。它可以添加延迟、错误和更正,使输入看起来更自然。这可以帮助你避开简单的僵尸检测系统,这些系统会寻找完美的键入。不过,puppeteer-humanize 也有一些限制。它不能隐藏你的 IP 地址,不能更改你的浏览器指纹,也不能解决验证码问题。

因此,如果你要对具有强大保护功能的网站进行刮擦,你需要的就不仅仅是这个工具了。但对于填写登录表单或收集公共数据等基本的刮擦任务来说,这是一种简单而有价值的方法,可以让你的机器人更人性化。

类似文章