通过 puppeteerOptions 在 puppeteer-cluster 中传递参数的正确方法

Correct way to pass args in puppeteer-cluster via puppeteerOptions

我正在尝试在我的代码中使用 args 来使用我拥有的代理服务。如果我完全删除 args 运行 很好,但如果我有它们,我会收到一条错误消息:错误:无法重新启动 chrome。我检查了多个示例并将其复制到我的代码中,但它似乎失败了。关于如何正确实施这个的任何想法?

代码:

const { Cluster } = require('puppeteer-cluster');
const vanillaPuppeteer = require('puppeteer');
const { addExtra } = require('puppeteer-extra');
const Stealth = require('puppeteer-extra-plugin-stealth')


async function main() {
  // Create a custom puppeteer-extra instance using `addExtra`,
  // so we could create additional ones with different plugin config.
  const puppeteer = addExtra(vanillaPuppeteer)
  puppeteer.use(Stealth())

  let proxy_server = 'proxy.soax.com:9000';
  let user = 'some_user_name';
  let pass = 'some_password';

  // Launch cluster with puppeteer-extra
  const cluster = await Cluster.launch({
    puppeteer,
    puppeteerOptions: {
        headless: false,
        args: ['--proxy-server=' + proxy_server,
               '--single-process', 
               '--no-zygote', 
               '--no-sandbox'],
        sameDomainDelay: 1000,
        retryDelay: 3000,
        workerCreationDelay: 3000},
    maxConcurrency: 2,
    concurrency: Cluster.CONCURRENCY_CONTEXT,
    monitor: false,
    skipDuplicateUrls: true
  })

  // Define task handler
  await cluster.task(async ({ page, data: url }) => {
    await page.authenticate({
        username: user,
        password: pass,
    });  
    await page.goto(url)

    const { hostname } = new URL(url)

    console.log(`checking on ${hostname}`)

    await page.screenshot({ path: `${hostname}.png`, fullPage: true })
  })

  // Queue any number of tasks
  cluster.queue('https://whatismyipaddress.com/')

  await cluster.idle()
  await cluster.close()
  console.log(`All done`)
}

main().catch(console.warn)

我试了一下,通过删除 arg --single-process 发现它工作正常。