1

考虑以下代码:

var content = "my-quite-long-html-string";
var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true  });
var page = await browser.NewPageAsync();

await page.SetContentAsync(content);
var pdfData = await page.PdfDataAsync(new PdfOptions { }); //*

await page.CloseAsync();

return Ok(pdfData);
  • pdfData有时设置为完全有效byte[],但有时只是部分结果(即实际 17899 字节的 1088 字节)。

整个片段永远不会抛出任何Exceptions东西,也不会以任何其他方式从运行到完成中断。

如果我在 处设置断点await page.SetContentAsync(content);并在允许继续执行之前等待一秒钟,pdfData则始终会填充完整且正确的数据。

此外,当SlowMo=50LaunchOptions(见下文)时,pdfData被准确设置的机会正在增加。当然,这只是问题所在的提示,而不是问题的解决方案。

var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true, SlowMo = 50 });

在我看来,这需要一些时间才能完成,并且在方法完全完成之前SetContentAsync以某种方式完成。await我错过了什么,做错了什么还是这是一个错误Puppeteer Sharp

4

1 回答 1

0

在 SetContentAsync() 调用之后添加 WaitForNavigationAsync() 以等待页面内容加载。默认情况下它等待 onLoad 事件,但您可以使用参数将其更改为等待不同的事件。

await page.WaitForNavigationAsync();
于 2018-09-26T14:47:11.027 回答