gpt4 book ai didi

node.js - 如何让 puppeteer 简单地加载网页?

转载 作者:行者123 更新时间:2023-12-03 11:05:27 25 4
gpt4 key购买 nike

我不能让 puppeteer 师做任何事情。我只是想让它显示 google.com,但我什至无法做到这一点。这是我的代码:

console.log('Loading puppeteer...');
const puppeteer = require('puppeteer');

async function test() {
console.log('Launching browser...');
const browser = await puppeteer.launch({headless: false});

console.log('Creating new page...');
const page = await browser.newPage();

console.log('Requesting url...');
await page.goto('https://www.google.com');

console.log('Closing browser...');
await browser.close();
}

test().catch(e=>{console.log(e)});
每次我尝试做任何事情时,Chromium 都会崩溃......
Chromium Crashes
然后我收到超时错误:
Loading puppeteer...
Launching browser...
TimeoutError: waiting for target failed: timeout 30000ms exceeded
...
...
数周以来,我一直在寻找解决方案。这东西不再起作用了吗?

最佳答案

看了之后this thread ,这表明这是 Puppeteer 的一个众所周知的问题,这里有一些关于 Puppeteer 超时问题的更多信息。
Puppeteer.launch() 有两部分会导致超时问题。一个是转到超时,另一个是等待超时。 由于我不知道是什么导致了您的具体问题,因此我将为您提供可能的解决方案。
可能的问题 #1:Goto 超时。
我将直接引用发布此解决方案的人 rudiedirkx:

In my case the goto timeout happens because of a forever-loading blocking resource (js or css). That'll never trigger the page's load or domcontentloaded. A bug in Puppeteer IMO, but whatever.

My fix (FINALLY!) is to do what Lighthouse does in its Driver: a Promise.race() for a custom 'timeout'-ish. The shorter version I used:

    const LOAD_FAIL = Math.random();
const sleep = options => new Promise(resolve => {
options.timer = setTimeout(resolve, options.ms, options.result === undefined ? true : options.result);
});

const sleepOptions = {ms: TIMEOUT - 1000, result: LOAD_FAIL};
const response = await Promise.race([
sleep(sleepOptions),
page.goto(url, {timeout: TIMEOUT + 1000}),
]);
clearTimeout(sleepOptions.timer);
const success = response !== LOAD_FAIL;
可能的问题 #2:Waitfor 超时。
或者,您可以尝试解决由经销商提供的等待超时的解决方案,添加 -- enable-blink-features=HTMLImportsargs :
browser = await puppeteer.launch({
//headless: false,
'args': [
'--enable-blink-features=HTMLImports'
]
});
如果这些都不起作用
如果这些解决方案都不起作用,我建议浏览该线程以找到人们建议的更多解决方案,看看您是否可以缩小问题的范围。使用此代码生成一些控制台日志,看看是否可以找到问题所在:
page
.on('console', message =>
console.log(`${message.type().substr(0, 3).toUpperCase()} ${message.text()}`))
.on('pageerror', ({ message }) => console.log(message))
.on('response', response =>
console.log(`${response.status()} ${response.url()}`))
.on('requestfailed', request =>
console.log(`${request.failure().errorText} ${request.url()}`));

关于node.js - 如何让 puppeteer 简单地加载网页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62618052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com