Puppeteer升级后报错‘Cannot extract value when objectId is given’求助
Puppeteer升级后出现"Cannot extract value when objectId is given"错误的解决思路
问题描述
在Ubuntu环境运行Puppeteer时触发错误:Cannot extract value when objectId is given,代码未做任何修改,仅升级了Puppeteer版本后出现该问题。
环境对比
可正常运行环境
- Ubuntu: 20.04.3
- Node: 14.17.5
- puppeteer: 9.1.1
- puppeteer-extra: 3.3.4
- puppeteer-extra-plugin-stealth: 2.11.1
无法运行环境
- Ubuntu: 22.10
- Node: 18.7.0
- puppeteer: 20.2.1
- puppeteer-extra: 3.3.6
- puppeteer-extra-plugin-stealth: 2.11.2
错误栈信息
Error: Cannot extract value when objectId is given at assert (/root/bot/node_modules/puppeteer-core/lib/cjs/puppeteer/util/assert.js:28:15) at valueFromRemoteObject (/root/bot/node_modules/puppeteer-core/lib/cjs/puppeteer/common/util.js:242:28) at createClientError (/root/bot/node_modules/puppeteer-core/lib/cjs/puppeteer/common/util.js:122:16) at CDPPage._CDPPage_handleException (/root/bot/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Page.js:894:94) at /root/bot/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Page.js:186:100 at /root/bot/node_modules/puppeteer-core/lib/cjs/third_party/mitt/index.js:3:248 at Array.map () at Object.emit (/root/bot/node_modules/puppeteer-core/lib/cjs/third_party/mitt/index.js:3:232) at CDPSessionImpl.emit (/root/bot/node_modules/puppeteer-core/lib/cjs/puppeteer/common/EventEmitter.js:87:22) at CDPSessionImpl._onMessage (/root/bot/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Connection.js:441:18) Node.js v18.7.0 Exit!
相关代码片段
const puppeteer = require('puppeteer'); const withBrowser = async (fn) => { const browser = await puppeteer.launch({ headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox', '--proxy-server=zproxy.lum-superproxy.io:22225', '--window-size=' + vWidth + ',' + vHeight], ignoreDefaultArgs: ['--disable-extensions', '--disable-default-apps', '--disable-component-extensions-with-background-pages'] }); try { return await fn(browser); } finally { await browser.close(); } } const withPage = (browser) => async (fn) => { const page = await browser.newPage(); await page.setViewport({ width: vWidth, height: vHeight, deviceScaleFactor: 1}); try { return await fn(page); } finally { await page.close(); await browser.close(); } } const results = await withBrowser(async (browser) => { return withPage(browser)(async (page) => { try { response = await page.goto(pageUrl); .catch((err) => { console.error(err); });
解决思路与方法
- 排查插件兼容性:新版Puppeteer(20.x)与puppeteer-extra、stealth插件的版本适配可能存在问题。可尝试降级Puppeteer到19.x/18.x版本,或等待puppeteer-extra插件发布适配20.x版本的更新。
- 自定义页面异常处理:错误触发于页面异常的默认解析逻辑,新版Puppeteer对远程对象的断言更严格。可以通过监听
page.on('error')事件,直接记录原始错误信息,避免默认的错误提取逻辑触发断言失败。 - 调整启动参数:新版Puppeteer对headless模式有调整,将
headless: true改为headless: 'new'测试;同时检查ignoreDefaultArgs是否禁用了影响错误处理的必要参数,尝试移除部分忽略项。 - 临时版本回退:若无法快速适配,暂时回退到旧环境的版本组合(Puppeteer 9.1.1 + Node 14.x),保证业务正常运行,后续再跟进版本适配。
- 调试触发场景:启用Puppeteer调试日志(设置
DEBUG=puppeteer:*),或在page.goto前后添加详细日志,定位页面抛出的具体异常,针对性处理页面端的问题。
内容的提问来源于stack exchange,提问作者user17929112
相关产品推荐
相关产品推荐

