SetContentAsync не завершается до PdfDataAsync

Рассмотрим следующий код:

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[] но более чем иногда это лишь частичный результат (т.е. 1088 байтов из фактических 17899 байтов).

Весь фрагмент никогда не выбрасывает Exceptions и при этом это никогда не прерывает от выполнения до завершения любым другим способом.

Если я установил точку останова на await page.SetContentAsync(content); и просто подождите секунду, прежде чем продолжить выполнение, pdfData всегда заполнен полными и правильными данными.

Кроме того, когда SlowMo=50 в LaunchOptions (см. ниже), шансы pdfData Быть точно установленным увеличивается. Естественно, это просто намек на то, где находится проблема, а не решение проблемы.

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

Мне кажется, что SetContentAsync занимает некоторое время, чтобы завершить и что-то await заканчивается до того, как метод полностью завершен. Я что-то упускаю, делаю что-то не так или это ошибка в Puppeteer Sharp?

1 ответ

Добавьте WaitForNavigationAsync() после вызова SetContentAsync(), чтобы дождаться загрузки содержимого страницы. По умолчанию он ожидает события onLoad, но вы можете использовать параметры, чтобы изменить его, чтобы дождаться другого события.

await page.WaitForNavigationAsync();
Другие вопросы по тегам