标签: puppeteer-cluster

如何使用启动参数(在无头模式下使用 chromium)提高 puppeteer 性能?

您好,我正在使用 puppeteer 来抓取网页(约 100 万条记录)。为了管理长时间的爬网,我使用 puppeteer-cluster 节点模块。

  1. 使用 puppeteer 启动 chromium 时已经启用了哪些标志?参数列表
  2. 有哪些参数可以让我提高 puppeteer 的性能?

目前我正在使用以下参数来启动 chromium:

args: [
  '--disable-setuid-sandbox',
  '--disable-dev-shm-usage',
  '--disable-accelerated-2d-canvas',
  '--no-first-run',
  '--disable-gpu'
]
Run Code Online (Sandbox Code Playgroud)

performance node.js puppeteer puppeteer-cluster

8
推荐指数
0
解决办法
1698
查看次数

打开 Chrome 而不获取焦点 (Puppeteer)

我正在使用 Puppeteer 启动多个浏览器 - 每隔几分钟,它就会重新打开浏览器。这工作正常,除了它不断打开浏览器并聚焦选项卡,在我尝试使用计算机时打扰我。由于我想做的事情,我有一些具体的问题,这些问题破坏了我能想出的任何想法,比如

  • 不要关闭浏览器,清除缓存!(我使用的插件不允许您像这样清除缓存,它会强制您关闭+重新启动浏览器)
  • 使用无头:正确!(同样,由于我的用例,该插件遗憾地不适用于 headless: true)

Tl;dr,我需要一种方法来打开不会获得焦点的浏览器(可以在 Puppeteer 中使用),而不只是设置 headless:true

如果您有任何建议或想法,那就太棒了!

编辑:我的操作系统是Windows

google-chrome puppeteer puppeteer-cluster

5
推荐指数
0
解决办法
470
查看次数

如何将 puppeteer 插件与 puppeteer 集群结合起来?

我有一个需要从使用 React 的网站中抓取的 url 列表,因此我使用 Puppeteer。我不想被反机器人服务器阻止,因此我添加了puppeteer-extra-plugin-stealth 我想阻止广告加载到页面上,所以我使用puppeteer-extra-plugin-来阻止广告adblocker 我还想防止我的IP地址被列入黑名单,所以我使用TOR节点来拥有不同的IP地址。下面是我的代码的简化版本,设置有效TOR_port虽然webUrl是动态分配的,但为了简化我的问题,我将其分配为变量)。但有一个问题:

const puppeteer = require('puppeteer-extra');
const _StealthPlugin = require('puppeteer-extra-plugin-stealth');
const _AdblockerPlugin = require('puppeteer-extra-plugin-adblocker');

puppeteer.use(_StealthPlugin());
puppeteer.use(_AdblockerPlugin());

var TOR_port = 13931;
var webUrl ='https://www.zillow.com/homedetails/2861-Bass-Haven-Ln-Saint-Augustine-FL-32092/47739703_zpid/';


const browser = await puppeteer.launch({
    dumpio: false,
    headless: false,
    args: [
        `--proxy-server=socks5://127.0.0.1:${TOR_port}`,
        `--no-sandbox`,
    ],
    ignoreHTTPSErrors: true,
});

try {
    const page = await browser.newPage();
    await page.setViewport({ width: 1280, height: 720 });
    await page.goto(webUrl, {
        waitUntil: 'load',
        timeout: 30000,
    });

    page
    .waitForSelector('.price') …
Run Code Online (Sandbox Code Playgroud)

javascript node.js puppeteer puppeteer-cluster

4
推荐指数
1
解决办法
3719
查看次数

puppeteer-cluster:排队而不是执行

我正在试验 Puppeteer Cluster,但我不明白如何正确使用排队。它只能用于不等待响应的呼叫吗?我正在使用 Artillery 同时发出一堆请求,但是当我直接执行命令时,它们都失败了,而只有一些失败。

我直接从示例中获取代码并替换executequeue我期望工作的代码,除了代码不等待结果。有没有办法实现这一目标?

所以这有效:

const screen = await cluster.execute(req.query.url);
Run Code Online (Sandbox Code Playgroud)

但这打破了:

const screen = await cluster.queue(req.query.url);
Run Code Online (Sandbox Code Playgroud)

这是完整的示例queue

const express = require('express');
const app = express();
const { Cluster } = require('puppeteer-cluster');

(async () => {
    const cluster = await Cluster.launch({
        concurrency: Cluster.CONCURRENCY_CONTEXT,
        maxConcurrency: 2,
    });
    await cluster.task(async ({ page, data: url }) => {
        // make a screenshot
        await page.goto('http://' + url);
        const screen = await page.screenshot();
        return screen;
    }); …
Run Code Online (Sandbox Code Playgroud)

javascript node.js puppeteer puppeteer-cluster

3
推荐指数
1
解决办法
3590
查看次数

Puppeteer:如何仅等待第一个响应(HTML)

我正在使用 puppeteer-cluster 来抓取网页。

如果我在每个网站上同时打开多个页面(8-10 个页面),连接速度会变慢,并且会出现许多超时错误,如下所示:

TimeoutError:超出导航超时:超出 30000 毫秒

我只需要访问每个页面的 HTML 代码。我不需要等待 domcontentloaded 等。

有没有办法告诉page.goto()仅等待来自网络服务器的第一个响应?或者我需要使用另一种技术来代替木偶操作者?

node.js puppeteer puppeteer-cluster

3
推荐指数
1
解决办法
4631
查看次数

Puppeteer 集群示例抛出错误:无法获取浏览器页面

我在puppeteer-cluster文档中使用这个示例

我在节点 v10.15.3 上运行它,我尝试将 headless 属性和 SlowMo 传递给 puppeteer 选项。

我希望代码能够注销并创建页面的屏幕截图,但是,发生的情况是几个 chrome 实例启动,它们不加载任何页面,然后控制台挂起并出现错误:

(node:30826) UnhandledPromiseRejectionWarning: Error: Unable to get browser page
    at Worker.<anonymous> (/Users/Starlord/Code/oppose/node_modules/puppeteer-cluster/dist/Worker.js:43:31)
    at Generator.next (<anonymous>)
    at fulfilled (/Users/Starlord/Code/oppose/node_modules/puppeteer-cluster/dist/Worker.js:4:58)
    at process._tickCallback (internal/process/next_tick.js:68:7)
(node:30826) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 21)
(node:30826) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, …
Run Code Online (Sandbox Code Playgroud)

javascript node.js puppeteer puppeteer-cluster

2
推荐指数
1
解决办法
4367
查看次数

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
    }
  });

   // …
Run Code Online (Sandbox Code Playgroud)

automated-tests end-to-end node.js puppeteer puppeteer-cluster

2
推荐指数
1
解决办法
3559
查看次数