首页 > 解决方案 > puppeteer-cluster使用中的问题

问题描述

我正在练习使用无头浏览器,我打算制作一个小查看器机器人。目标是能够放置一个播放流的站点,并能够选择多个观众在流上发送,并有可能在不重新启动应用程序的情况下增加或减少数量。

目前我在使用 puppeteer-cluster 时遇到了一些问题。

1/ 找不到同时处理活动任务数量的方法,如何随时添加或删除。也就是我这个案子的观众人数。Puppeteer会比Puppeteer-cluster更好吗?

2 /当集群的任务上线时,如果我在单个任务上遇到超时问题,那么所有其他任务也会崩溃。我该如何解决?

3/ 一旦任务启动,如何确保它永远不会结束,查看者在页面上没有被检测到 AFK 或任务完成。

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

const {addExtra} = require('puppeteer-extra')
const Stealth = require('puppeteer-extra-plugin-stealth')

async function main() {

  const puppeteer = addExtra(vanillaPuppeteer)
  puppeteer.use(Stealth())

  let viewers = 3;
  let live = 'https://a-live-stream.com';

  const browserArgs = [
    '--no-sandbox',
    '--disable-setuid-sandbox',
    '--disable-infobars'
  ];

  const proxies = [
    'proxy:port',
    'proxy:port',
    'proxy:port',
  ];

  let perBrowserOptions = [];

  for (let i = 0; i < viewers; i++) {
    perBrowserOptions = [...perBrowserOptions, {args: browserArgs.concat(['--proxy-server=' + proxies[i]])}]
  }

  const cluster = await Cluster.launch({
    puppeteerOptions: {
      headless: false,
      args: browserArgs,
      executablePath: 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe'
    },
    monitor: false,
    puppeteer,
    concurrency: Cluster.CONCURRENCY_BROWSER,
    maxConcurrency: viewers,
    perBrowserOptions: perBrowserOptions
  });

  cluster.on('taskerror', (err, data) => {
    console.log(`Error crawling ${data}: ${err.message}`);
  });

  const viewer = async ({page, data: url}) => {
    await page.goto(url, {waitUntil: 'networkidle2'})
    const element = await page.$('iframe')
    await element.click()

    console.log('#Viewer live')
    await page.waitFor(3000000)
    console.log('#Closed')
  };

  cluster.queue(live, viewer)
  cluster.queue(live, viewer)
  cluster.queue(live, viewer)


  await cluster.idle()
  await cluster.close()
}

main().catch(console.warn)

标签: javascriptnode.jspuppeteergoogle-chrome-headless

解决方案


推荐阅读