PuppeteerSharp Target Crashed Exception при отправке формы - PullRequest
0 голосов
/ 07 августа 2020

В моем приложении есть функция PuppeteerSharp, которая автоматизирует этот веб-сайт: https://dtucalculator.azurewebsites.net/

Цель состоит в том, чтобы заполнить форму, указав значение ядра процессора и CSV с данными о производительности (сгенерированными до этой функции), а затем отправьте форму, сохраняя полученный отчет в формате PDF.

Функция выглядит примерно так:

//Browserless Browser
var connectOptions = new ConnectOptions() { BrowserWSEndpoint = "wss://chrome.browserless.io?token=APITOKEN" };
var browser = await Puppeteer.ConnectAsync(connectOptions);

//Local Browser
//await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
//browser = await Puppeteer.LaunchAsync(new LaunchOptions() { Headless = true });

var page = (await browser.PagesAsync())[0];
var viewPortOptions = new ViewPortOptions
{
    Height = 1080,
    Width = 1920
};
await page.SetViewportAsync(viewPortOptions);
var options = new NavigationOptions
{
    Timeout = 0,
    WaitUntil = new[] { WaitUntilNavigation.Networkidle2 }
};
await page.GoToAsync("https://dtucalculator.azurewebsites.net/", options);
ElementHandle coresInput = await page.WaitForSelectorAsync("#cores");
await page.TypeAsync("#cores", (CoresPerSocket * SocketCount).ToString());
ElementHandle fileUploadInput = await page.WaitForSelectorAsync("#fileUpload");
await fileUploadInput.UploadFileAsync(filePath);
try
{
    await page.ClickAsync(".btn-success");
}
catch (Exception ex)
{
    //Log Error here
}
Thread.Sleep(150);
await page.ClickAsync("#details");
Thread.Sleep(1500);
byte[] pdfBytes = await page.PdfDataAsync(new PdfOptions
{
    Format = PaperFormat.A4,
    MarginOptions = new MarginOptions { Left = "1cm", Right = "1cm", Top = "1cm", Bottom = "1cm" },
});
await page.CloseAsync();
await browser.CloseAsync();
return pdfBytes;

функция отлично работает, когда я использую локальный браузер, но ошибки, когда я использую соединение без браузера. Соединение без браузера требуется, когда мое приложение развернуто в моей службе приложений Azure.

Целевое исключение сбоя создается, когда PuppeteerSharp нажимает кнопку вычисления, которая видна заключенной в try-catch. Подробности, которые я получаю из сообщения об ошибке, следующие:

Странице не удалось обработать Inspector.targetCrashed. Возникло исключение типа 'PuppeteerSharp.TargetCrashedException' .. в PuppeteerSharp.Page.OnTargetCrashed () в PuppeteerSharp.Page.Client_MessageReceived (отправитель объекта, MessageEventArgs e)

* 1018 1021 * Ошибка протокола (Runtime.callFunctionOn): цель закрыта. (Странице не удалось обработать Inspector.targetCrashed. Возникло исключение типа 'PuppeteerSharp.TargetCrashedException' .. в PuppeteerSharp.Page.OnTargetCrashed () в PuppeteerSharp.Page.Client_MessageReceived (Object sengsder * event * 10)

Я связался без браузера, и они не верят, что проблема кроется в них, поэтому я не понимаю, что вызывает эту проблему, учитывая различное поведение между двумя источниками браузера. Кто-нибудь сталкивался с подобной проблемой или понимал больше, в чем может быть основная причина?

...