node.js - Puppeteer-Cluster Stealthy 是否足以通过机器人测试?
问题描述
我想知道是否有人使用 Puppeteer-Cluster 可以详细说明 Cluster.Launch({settings}) 如何防止在不同上下文中的页面之间共享 cookie 和 Web 数据。
这里的浏览器上下文是否实际上阻止了 cookie 并且不共享或跟踪用户数据?Browserless' 现在臭名昭著的页面似乎认为不,这里应该在任务上调用 .launch({}) ,而不是在队列之前调用。
所以我的问题是,我们如何知道 puppeteer-cluster 是否在队列任务之间共享 cookie/数据?库中有哪些选项可以降低被标记为机器人的机会?
设置:我正在将 page.authenticate 与代理服务、随机用户代理一起使用,但我正在执行测试的站点偶尔仍会被阻止(403)。
async function run() {
// Create a cluster with 2 workers
const cluster = await Cluster.launch({
concurrency: Cluster.CONCURRENCY_BROWSER, //Cluster.CONCURRENCY_PAGE,
maxConcurrency: 2, //5, //25, //the number of chromes open
monitor: false, //true,
puppeteerOptions: {
executablePath,
args: [
"--proxy-server=pro.proxy.net:2222",
"--incognito",
"--disable-gpu",
"--disable-dev-shm-usage",
"--disable-setuid-sandbox",
"--no-first-run",
"--no-sandbox",
"--no-zygote"
],
headless: false,
sameDomainDelay: 1000,
retryDelay: 3000,
workerCreationDelay: 3000
}
});
// Define a task
await cluster.task(async ({ page, data: url }) => {
extract(url, page); //call the extract
});
//task
const extract = async ({ page, data: dataJson }) => {
page.setExtraHTTPHeaders({headers})
await page.authenticate({
username: proxy_user,
password: proxy_pass
});
//Randomized Delay
await delay(2000 + (Math.floor(Math.random() * 998) + 1));
const response = await page.goto(dataJson.Url);
}
//loop over inputs, and queue them into cluster
var dataJson = {
url: url
};
cluster.queue(dataJson, extract);
}
// Shutdown after everything is done
await cluster.idle();
await cluster.close();
}
解决方案
直接回答
这里的作者puppeteer-cluster
。该库不会主动阻止 cookie,但会使用browser.createIncognitoBrowserContext()
:
创建一个新的隐身浏览器上下文。这不会与其他浏览器上下文共享 cookie/缓存。
此外,文档指出“隐身浏览器上下文不会将任何浏览数据写入磁盘”(来源),因此重新启动浏览器无法重用磁盘中的任何 cookie,因为没有写入数据。
关于库,这意味着在执行作业时,会创建一个新的隐身上下文,该上下文不与其他上下文共享任何数据(cookie 等)。因此,只要 Chromium 正确实现了隐身浏览器上下文,作业之间就不会共享数据。
您链接的页面仅谈论browser.newPage()
(在页面之间共享 cookie)而不是隐身上下文。
为什么网站可能会将您识别为机器人
有些网站仍然会阻止您,因为它们使用不同的措施来检测机器人。如果用户代理与浏览器指纹不匹配,则有无头浏览器检测测试和指纹库可能会将您报告为机器人。您可能对我的这个答案感兴趣,它提供了一些更详细的解释这些指纹是如何工作的。
您可以尝试使用puppeteer-extra
带有stealth
插件的库来帮助您解决问题。然而,这基本上是一场猫捉老鼠的游戏。指纹测试可能会改变,或者其他站点可能会使用不同的“检测”机制。总而言之,无法保证网站不会检测到您。
如果您想使用puppeteer-extra
,请注意您可以将它与puppeteer-cluster
(示例代码)结合使用。
推荐阅读
- javascript - Service Worker 无法在新的 chrome 窗口中启动
- spring-boot - 服务在一段时间后自动从领事注销
- docker - 可视化编辑器:跳转到导航 跳转到搜索 联系 Parsoid/RESTBase 服务器时出错
- python - 使用 Python 运行并行 Databricks 笔记本
- c - 嵌套函数指针或函数组合
- python - 菜鸟问题更新函数中的变量
- google-cloud-storage - 如何设置 Google Cloud Storage 负载均衡器以将不同的域指向同一存储桶上的特定文件夹?
- javascript - 有没有办法使用 gulp-htmlmin 来取消压缩 html 文件?
- forms - Power Automate - Or Condition with multiply Grouped AND statements is always turning true
- c# - 在括号中打印列表 C#