NodeJS 网页抓取逾时错误:超过30000毫秒的导航超时

a2mppw5e  于 2022-11-04  发布在  Node.js
关注(0)|答案(2)|浏览(621)

我在用 puppet 戏从一家公司的网站上提取一些表格。
但我不明白为什么浏览器打开的是Chromium而不是我默认的Chrome,这就导致“TimeoutError:超过30000毫秒的导航超时”,没有足够的时间使用CSS选择器。我没有看到任何有关此问题的文档。

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({headless: false});
  const page = await browser.newPage()
  await page.goto('https://www....com');
//search tearm
  await page.type("#search_term","Brazil");

  //await page.screenshot({path: 'sc2.png'});
  //await browser.close();
})();
zbdgwd5y

zbdgwd5y1#

Puppeteer,默认是基于chrome的。如果你想使用chrome,你必须通过executablePath启动参数指定可执行路径。但是老实说,大多数时候,这样做是没有意义的。

let browser = await puppeteer.launch({
    executablePath: `/path/to/Chrome`,
    //...
});

TimeoutError: Navigation timeout of 30000 ms exceeded和使用chromium之间没有相关性,更有可能的是你的目标url还没有可用。
后藤在以下情况下将抛出错误:

  • 存在SSL错误(例如,如果是自签名证书)。
  • 目标URL无效
  • 在导航期间超时。
  • 远程服务器不响应或无法访问。
  • 无法加载主资源。

默认情况下,最大导航超时时间为30秒。如果由于某种原因,您的目标url需要更多的时间来加载(这似乎不太可能),您可以指定timeout: 0选项。

await page.goto(`https://github.com/`, {timeout: 0});

因为当返回HTTP状态码时,“ Puppeteer ”不会抛出错误...
后藤不会在远程服务器返回任何有效的HTTP状态代码时抛出错误,包括404“Not Found”和500“Internal Server Error”。
我通常会检查HTTP response status codes,以确保没有遇到任何404 Client error responses Bad Request

let status = await page.goto(`https://github.com/`);
status = status.status();
if (status != 404) {
    console.log(`Probably HTTP response status code 200 OK.`);
    //...
};

我在这里盲目飞行,因为我没有你的目标网址,也没有更多的信息,你正在努力完成。
您还应该给予puppeteer api documentation

pkbketx9

pkbketx92#

下面的方法对我很有效。试着在你的代码中添加下面的“1 Liner”。
setDefaultNavigationTimeout方法允许你定义标签页的超时时间,并期望作为第一个参数,value in milliseconds。这里的值是0 meansunlimited amount of time。因为我知道我的页面总有一天会加载。

const puppeteer = require('puppeteer');
(async () => {
  const browser = await puppeteer.launch({headless: false});
  const page = await browser.newPage()
  // Add the below 1 line of code
  await page.setDefaultNavigationTimeout(0);
  // follows the rest of your code block
})();

相关问题