0

次のコードを実行しようとしています。

            await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
#if DEBUG
            var chromeLocation = Path.Combine(context.FunctionDirectory, @"../.local-chromium/Win64-706915/chrome-win/chrome.exe");
#endif
            stage = "Start Browser";
            var browser = await Puppeteer.LaunchAsync(new LaunchOptions
            {
                Headless = true,
                Args = new[] { "--no-sandbox", "--shm-size=1gb" }
#if DEBUG
                ,
                ExecutablePath = chromeLocation,
                IgnoreHTTPSErrors = true
#endif
            });
            var page = await browser.NewPageAsync();
            var headers = new Dictionary<string, string> { { "Authorization", $"Bearer {authToken}" } };
            await page.SetExtraHttpHeadersAsync(headers);
            stage = "Load Page";
            await page.GoToAsync(printToPdfRequest.TargetUrl);
            stage = "Load Page 1";
            Thread.Sleep(5000);
            // This waits unti the loader has disappeared or times-out after 30 seconds
            await page.WaitForFunctionAsync("() => document.getElementsByClassName('loader').length > 0 && document.getElementsByClassName('loader')[0].style.length > 0 && document.getElementsByClassName('loader')[0].style[0] === 'display' && document.getElementsByClassName('loader')[0].style['display'] === 'none'");

これはローカルで機能しますが、docker コンテナーにデプロイすると最後の行で失敗します。次のメッセージで失敗します。

ステージ Load Page 1 で PrintToPdf が失敗し、メッセージ Protocol error (Runtime.callFunctionOn): Session closed. ほとんどの場合、ページは閉じられています。閉じる理由: NetworkManager が Network.requestWillBeSent の処理に失敗しました。値を null にすることはできません。(パラメータ「キー」)。System.Collections.Concurrent.ConcurrentDictionary 2.ThrowKeyNullException() at System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd(TKey キー、Func 2 valueFactory) at PuppeteerSharp.Helpers.MultiMap2.Add(TKey キー、TValue 値) でPuppeteerSharp.NetworkManager.Client_MessageReceived (オブジェクト送信者、MessageEventArgs e) での PuppeteerSharp.NetworkManager.OnRequestWillBeSentAsync(RequestWillBeSentPayload e) での String interruptionId)

このエラーは何を意味し、どのように修正/回避できますか?

これは、違いが生じる場合、Azure コンテナー インスタンスによってサポートされる Azure 関数で実行されています。

4

1 に答える 1