【问题标题】:Webscraping TimeoutError: Navigation timeout of 30000 ms exceededWebscraping TimeoutError:超过 30000 毫秒的导航超时
【发布时间】:2022-01-25 22:23:08
【问题描述】:

我正在尝试使用 WebScraping 从使用 puppeteer 的公司网站中提取一些表格。

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

【问题讨论】:

    标签: node.js puppeteer platformio


    【解决方案1】:

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

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

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

    page.goto 在以下情况下会抛出错误:

    • 存在 SSL 错误(例如,在自签名证书的情况下)。
    • 目标网址无效。
    • 导航期间超时。
    • 远程服务器没有响应或无法访问。
    • 主资源加载失败。

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

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

    因为 Puppeteer 在返回 HTTP 状态码时不会抛出错误...

    page.goto 不会在远程服务器返回任何有效的 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.`);
        //...
    };
    

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

    您还应该阅读GitHub api documentation

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 1970-01-01
      • 2022-12-29
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多