gpt4 book ai didi

node.js - Nodejs/Puppeteer - 导航超时

转载 作者:搜寻专家 更新时间:2023-10-31 23:50:31 25 4
gpt4 key购买 nike

我需要帮助来理解超时是如何工作的,尤其是 Node/puppeteer

我阅读了所有关于此的堆栈问题和 github 问题,但我可以找出问题所在

可能是我的代码...

当我运行这个文件时,我收到来自图像的错误。你可以看到我尝试修复它的方法,但没有任何效果

有人可以解释为什么会发生这种情况以及避免这种情况的最佳方法吗?有没有更好的方法来获得这些项目?

//vou até os seeds em x tempo
var https = require('https');
var Q = require('q');
var fs = require('fs');
var puppeteer = require('puppeteer');
var Projeto = require('./Projeto.js');

const url = 'https://www.99freelas.com.br/projects?categoria=web-e-desenvolvimento'
/*const idToScrape;
deverá receber qual a url e os parametros específicos de cada seed */
async function genScraper() {
const browser = await puppeteer.launch();
const page = await browser.newPage();

//page.setDefaultNavigationTimeout(60000);
page.waitForNavigation( { timeout: 60000, waitUntil: 'domcontentloaded' });

await page.goto(url);


var projetos = await page.evaluate(() => {
let qtProjs = document.querySelectorAll('.result-list li').length;

let listaDeProjs = Array.from(document.querySelectorAll('.result-list li'));

let tempProjetos = [];

for( var i=0; i<=listaDeProjs.length; i++ ) {
let titulo = listaDeProjs[i].children[1].children[0].textContent;
let descricao = listaDeProjs[i].children[2].textContent;
let habilidades = listaDeProjs[i].children[3].textContent;
let publicado = listaDeProjs[i].children[1].children[1].children[0].textContent;
let tempoRestante = listaDeProjs[i].children[1].children[1].children[1].textContent;
//let infoCliente;
proj = new Projeto(titulo, descricao, habilidades, publicado, tempoRestante);
tempProjetos.push(proj);
}

return tempProjetos;
});

console.log(projetos);
browser.close();
}

genScraper();

enter image description here

最佳答案

我建议您避免在 goTo 调用之前使用方法 waitForNavigation

基本上,最好使用默认值30000 的方法gotTo。在我看来,如果网站工作或响应的时间超过 30 秒,则应该有问题。

相反,我会做这样的事情:

await page.goto(url, {
waitUntil: 'networkidle0'
});

根据您使用的 puppeteer 版本,您会有不同的行为。我使用的是 1.4.0 版,目前运行良好。

在文档中声明如下:

The page.goto will throw an error if:

  • there's an SSL error (e.g. in case of self-signed certificates).
  • target URL is invalid.
  • the timeout is exceeded during navigation.
  • the main resource failed to load.

因此,请检查之前的情况是否都没有发生。

此外,您可以从您的终端 curl URL 以查看该 URL 是否响应外部调用,跨源问题也很常见。

真诚地,没有办法说出什么可以触发您的超时,但该 list 应该有所帮助。我最近遇到了超时问题,问题出在我的服务器配置上,所以我建议你也看看你运行这段代码的机器是否有执行所需的内存。

关于node.js - Nodejs/Puppeteer - 导航超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52039936/

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