使用Puppeteer对https://www.leptitpinard.fr截图失败的问题求助
Puppeteer截图特定网站时出现"Cannot extract value when objectId is given"错误
问题详情
我使用以下Puppeteer代码进行网页截图,其他网站均能正常工作,但对https://www.leptitpinard.fr执行时抛出错误:
const puppeteer = require('puppeteer'); async function run() { try { const browser = await puppeteer.launch({ args: ['--no-sandbox'], headless: 'new' }); const page = await browser.newPage(); await page.goto('https://www.leptitpinard.fr', { waitUntil: 'networkidle0' }); await page.screenshot({path: 'screenshot.png'}); await browser.close(); } catch (error) { console.error('Error during capture:', error); } } run();
错误输出:
root@vps-0134553348d1:/var/www/vhosts/xxxxx.fr/httpdocs/api# node test1.js /var/www/vhosts/xxxxx.fr/httpdocs/api/node_modules/puppeteer-core/lib/cjs/puppeteer/util/assert.js:28 throw new Error(message); ^ Error: Cannot extract value when objectId is given at assert (/var/www/vhosts/xxxxx.fr/httpdocs/api/node_modules/puppeteer-core/lib/cjs/puppeteer/util/assert.js:28:15) at valueFromRemoteObject (/var/www/vhosts/xxxxx.fr/httpdocs/api/node_modules/puppeteer-core/lib/cjs/puppeteer/common/util.js:239:28) at createClientError (/var/www/vhosts/xxxxx.fr/httpdocs/api/node_modules/puppeteer-core/lib/cjs/puppeteer/common/util.js:122:16) at CDPPage._CDPPage_handleException (/var/www/vhosts/xxxxx.fr/httpdocs/api/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Page.js:894:94) at /var/www/vhosts/xxxxx.fr/httpdocs/api/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Page.js:186:100 at /var/www/vhosts/xxxxx.fr/httpdocs/api/node_modules/puppeteer-core/lib/cjs/third_party/mitt/index.js:3:248 at Array.map () at Object.emit (/var/www/vhosts/xxxxx.fr/httpdocs/api/node_modules/puppeteer-core/lib/cjs/third_party/mitt/index.js:3:232) at CDPSessionImpl.emit (/var/www/vhosts/xxxxx.fr/httpdocs/api/node_modules/puppeteer-core/lib/cjs/puppeteer/common/EventEmitter.js:87:22) at CDPSessionImpl._onMessage (/var/www/vhosts/xxxxx.fr/httpdocs/api/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Connection.js:441:18)
解决方案
这个错误一般是目标页面抛出了包含复杂对象的异常,Puppeteer解析该异常时失败导致的,试试下面几种方法:
忽略页面级错误:在
page.goto前添加监听,捕获页面错误但不处理,避免Puppeteer尝试解析异常对象page.on('pageerror', () => {});调整页面加载等待策略:
networkidle0要求所有网络连接都断开,可能等待过久触发异常,换成domcontentloaded或networkidle2await page.goto('https://www.leptitpinard.fr', { waitUntil: 'domcontentloaded' });更新Puppeteer版本:旧版本可能和目标网站的JS环境不兼容,执行更新命令:
npm update puppeteer模拟真实浏览器环境:添加额外启动参数,避免网站检测,同时增强兼容性
const browser = await puppeteer.launch({ args: [ '--no-sandbox', '--disable-setuid-sandbox', '--user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"' ], headless: 'new' });
完整修改后的代码
const puppeteer = require('puppeteer'); async function run() { try { const browser = await puppeteer.launch({ args: [ '--no-sandbox', '--disable-setuid-sandbox', '--user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"' ], headless: 'new' }); const page = await browser.newPage(); // 忽略页面抛出的错误,避免Puppeteer解析异常失败 page.on('pageerror', () => {}); await page.goto('https://www.leptitpinard.fr', { waitUntil: 'domcontentloaded' }); await page.screenshot({path: 'screenshot.png'}); await browser.close(); } catch (error) { console.error('Error during capture:', error); } } run();
内容的提问来源于stack exchange,提问作者jungle BTC
相关产品推荐
相关产品推荐

