【问题标题】:Puppeteer launcher error results with undefinedPuppeteer 启动器错误结果未定义
【发布时间】:2021-11-28 08:16:18
【问题描述】:

在 Windows 上测试我的项目后,我已将其部署到基于 Ubuntu 的 VM 上,而这正是 Puppeteer 行为让我感到困惑的地方。我确实安装了所有必需的依赖项,但我感觉我的错误不一定是由于缺少依赖项以及更多关于配置问题而导致的。

功能结构:

  async initPuppeteerBrowser() {
    if (
      this.puppeteerBrowser === null ||
      (await this.puppeteerBrowser.pages()).length === 0
    ) {
      this.puppeteerBrowser = await launch({ headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox'] });
    }

    return await this.puppeteerBrowser.newPage();
  }

结果:

err: {
      "type": "TypeError",
      "message": "Cannot read properties of undefined (reading '_launcher')",
      "stack":
          TypeError: Cannot read properties of undefined (reading '_launcher')
              at launch (/root/dev/logoex-server/node_modules/puppeteer/lib/cjs/puppeteer/node/Puppeteer.js:125:21)
              at CorporationsScraper.initPuppeteerBrowser (/root/dev/logoex-server/dist/aid/scraper/corporations.scraper.js:33:66)
              at CorporationsScraper.corporationIterator (/root/dev/logoex-server/dist/aid/scraper/corporations.scraper.js:54:37)
              at processTicksAndRejections (node:internal/process/task_queues:96:5)
    }

我什至不明白我是如何开始调查这个问题的

【问题讨论】:

    标签: node.js ubuntu deployment puppeteer


    【解决方案1】:

    不确定,如果这对您的情况有帮助 - 我有 Typescript,带有 compilerOptions lib: ["es2020"],它抛出了这个错误。将其更改为 lib: ["es2017"] 为我解决了这个问题。我什至不确定,为什么它会这样影响它。我猜,当你通过像import { fn } from "somewhere" 这样的导入来获得一个函数但该函数以某种方式从类实例中导出时 - 它失去了它与this 的绑定。

    否则导入这样的作品

    // Works
    import Puppeteer, { Browser, PDFOptions } from "puppeteer";
    browser = await Puppeteer.launch({});
    
    // Doesn't work
    import { launch, Browser, PDFOptions } from "puppeteer";
    browser = await launch({});
    

    【讨论】:

    • 哇,谢谢!我将导入从 import { launch } from "puppeteer"; 更改为 import * as puppeteer from "puppeteer"; 并修复了它。我猜import Puppeteer from "puppeteer"; 也适用于esModuleInterop true
    【解决方案2】:

    这样使用。

    async initPuppeteerBrowser() {
        if (
          this.puppeteerBrowser === null ||
          (await this.puppeteerBrowser.pages()).length === 0
        ) {
          this.puppeteerBrowser = await launch({ headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox'] });
        }
    
        return this.puppeteerBrowser.newPage();
      }
    

    【讨论】:

    • 没用,问题出在_launcher
    • 你尝试过这样做吗? await launch();,headless 不需要设置为“true”,默认为true。
    猜你喜欢
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 2019-07-24
    相关资源
    最近更新 更多