puppeteer 的 goto 方法响应十分慢,可能是什么原因?

2020-08-16 12:46:32 +08:00
 Shook

昨天想要实现个打印网页为 PDF 的功能,顺便学习 TypeScript 和 Nest.js 。 遇到了这些问题:

  1. 方法的返回值类型定为Promise<Buffer>,但也有可能返回 puppeteer 的Error,这时候返回值该咋写,也没错误提示
  2. page.goto()方法定了 5 秒的 timeout,但还是有可能触发超时错误,这个该咋办,真实浏览器响应很快
  3. 一堆 await 的代码该如何组织,错误该如何处理?

附上代码:

async generatePDFFromURL(url: string): Promise<Buffer> {
    return new Promise<Buffer>(async (resolve, reject) => {
      const browser = await puppeteer.launch(),
            page    = await browser.newPage();

      try {
        await page.goto(url, {
          timeout: 5000,
        });
      } catch(error) {
        reject(error);
      }

      const pdf = await page.pdf({
        format: 'A4',
      });

      await browser.close();

      resolve(pdf);
    });
  }
2388 次点击
所在节点    Node.js
2 条回复
tmkook
2020-08-16 12:58:38 +08:00
goto 是要等全部资源加载完的,一旦有阻塞 5 秒肯定不够
mauve
2020-08-17 10:40:07 +08:00
```javascript
await page.waitForNavigation()
await page.waitForSelector('[name="passwd"]')
```
尝试一下这两种写法呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/698663

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX