Я использую приложение .Net Core 2.x в службе приложений Linux. Когда я запускал Puppeteer, я получал следующие ошибки:
/home/site/wwwroot/.local-chromium/Linux-686378/chrome-linux/chrome: error while loading shared libraries: libX11.so.6: cannot open shared object file: No such file or directory
PuppeteerSharp.ChromiumProcessException:
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
at PuppeteerSharp.ChromiumProcess+State+StartingState+<StartCoreAsync>d__5.MoveNext (PuppeteerSharp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null)
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
at PuppeteerSharp.ChromiumProcess+State+StartingState+<StartCoreAsync>d__5.MoveNext (PuppeteerSharp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null)
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
at PuppeteerSharp.Launcher+<LaunchAsync>d__7.MoveNext (PuppeteerSharp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null)
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e
Я знаю об ограничениях в Службе приложений Windows, которые не позволяют запускать Selenium и GDI, но я думал, что это будет работать в Службах приложений Linux.
https://github.com/projectkudu/kudu/wiki/Azure-Web-App-sandbox#win32ksys-user32gdi32-restrictions
Вот мой код:
var browserFetcher = new BrowserFetcher(new BrowserFetcherOptions
{
Path = ".local-chromium"
});
await browserFetcher.DownloadAsync(BrowserFetcher.DefaultRevision);
var browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
Headless = true,
ExecutablePath = browserFetcher.RevisionInfo(BrowserFetcher.DefaultRevision).ExecutablePath,
Args = new []{"--no-sandbox"}
});
using (var page = await browser.NewPageAsync())
{
await page.GoToAsync(url);
await page.WaitForSelectorAsync($"#{waitById}");
return await page.GetContentAsync();
}