You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用puppeteer-extra时无法正确获取TimeoutError的问题求助

使用puppeteer-extra时无法正确获取TimeoutError的问题求助

之前我解决了原生Puppeteer代码里TimeoutError未定义的问题,但换成puppeteer-extra(搭配stealth插件)之后,又卡在了获取TimeoutError这一步。运行测试代码时总是报错TypeError: Right-hand side of 'instanceof' is not an object,实在搞不懂哪里出问题了,麻烦大家帮我看看!

先给大家看我用来复现问题的最小可运行代码(SSCCE):

const puppeteer = require("puppeteer-extra");
let browser;

(async () => {
  const stealthPlugin = require('puppeteer-extra-plugin-stealth');
  puppeteer.use(stealthPlugin());
  
  browser = await puppeteer.launch();
  const [page] = await browser.pages();
  
  try {
    await page.goto("https://www.example.com", {timeout: 1}); // 设极短超时强制触发错误
  } catch (err) {
    if (err instanceof puppeteer.TimeoutError) {
      console.log("caught timeout error", err);
    } else {
      console.log("caught non-timeout error", err);
    }
  }
})()
.catch(err => console.log(err))
.finally(() => browser?.close());

(注:这里用console.log()而非console.error()是因为我的客户端代码拿不到错误流里的内容)

相关环境信息

一开始我只知道项目里Puppeteer的版本是23.7.1,不知道puppeteer-extra的版本,后来查了下各个相关组件的版本:

  • puppeteer-extra: 3.3.6
  • puppeteer-extra-plugin: 3.2.3
  • puppeteer-extra-plugin-stealth: 2.11.2
  • puppeteer-extra-plugin-user-data-dir: 2.4.1
  • puppeteer-extra-plugin-user-preferences: 2.4.1

项目根目录的package.json内容如下(遗憾的是里面没提到puppeteer-extra,应该是直接安装但没记录到依赖里):

{
  "name": "puppeteer-project",
  "version": "1.0.0",
  "description": "Puppeteer Project",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "puppeteer": "^23.7.1"
  }
}

我尝试过的修改(但还是没解决)

看了相关建议后,我试着同时引入原生Puppeteer和puppeteer-extra,想用原生的TimeoutError来做判断,代码改成了这样:

const pupbasic = require("puppeteer"); // ^23.7.1
const puppeteer = require("puppeteer-extra"); // ^3.3.6
const stealthPlugin = require("puppeteer-extra-plugin-stealth"); // ^2.11.2

puppeteer.use(stealthPlugin());
let browser;

(async () => {
  browser = await puppeteer.launch();
  const [page] = await browser.pages();
  
  try {
    await page.goto("https://www.example.com", {timeout: 1});
  } catch (err) {
    if (err instanceof pupbasic.errors.TimeoutError) {
      console.log("caught timeout error", err);
    } else {
      console.log("caught non-timeout error", err);
    }
  }
})()
.catch(err => console.log(err))
.finally(() => browser?.close());

结果又报了新错误:TypeError: Cannot read properties of undefined (reading 'TimeoutError')

另外我发现本地好像装了两个版本的Puppeteer:项目目录下的package.json写的是23.7.1,但用户目录下node_modules/puppeteer里的版本是23.9.0,会不会是版本冲突导致的?

我JS经验不多,也找不到相关源码去排查,实在是摸不着头脑了,有没有大佬能指点一下?万分感谢!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 09:43:03