Webscraping TimeoutError: Navigation timeout of 30000 ms exceeded

Webscraping TimeoutError: Navigation timeout of 30000 ms exceeded

我正在尝试使用 puppeteer 从公司网站中提取一些 table。

但我不明白为什么浏览器打开 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();
})();

Puppeteer,默认基于铬。 如果您希望使用 chrome,您必须通过 executablePath launch parameter 指定可执行文件路径。但说实话,很多时候,这样做是没有意义的。

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

TimeoutError: Navigation timeout of 30000 ms exceeded 与铬的使用之间没有相关性,更有可能是您的目标 url 尚未(尚未)可用。

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 remote server does not respond or is unreachable.
  • the main resource failed to load.

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

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

由于返回 HTTP 状态代码时 Puppeteer 不会抛出错误...

page.goto will not throw an error when any valid HTTP status code is returned by the remote server, including 404 "Not Found" and 500 "Internal Server Error".

我通常检查HTTP response status codes to make sure I'm not encountering any 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.`);
    //...
};

我在这里瞎了眼,因为我没有你的目标 url 也没有关于你想要完成的事情的更多信息。

你也应该给 GitHub api documentation 读一读。