WaitUntil не ждет / Получить HTML на WaitForSelectorAsync - PullRequest
0 голосов
/ 01 апреля 2019

Имея две проблемы, я был бы признателен за некоторые советы. В прошлом использовали кукловода в узле, но по какой-то причине столкнулись с проблемой на острой версии.

По сути, я сканирую веб-страницу с параметром WaitUntil, установленным в WaitUntilNavigation.Networkidle0, самый длинный период ожидания. В моем коде узла это работает и загружает мой веб-сайт правильно, но в версии C # я получаю страницу без угловой загрузки. Насколько я могу судить, он не ждет и не возвращает исходное состояние загрузки. Ниже мой код.

        if (BROWSER == null)
        {
            await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);

            BROWSER = await Puppeteer.LaunchAsync(new LaunchOptions
            {
                Headless = true,
                Args = new string[] { "--no-sandbox", "--disable-accelerated-2d-canvas", "--disable-gpu", "--proxy-server='direct://'", "--proxy-bypass-list=*" }
            });
        }

        if (page == null)
        {
            page = await BROWSER.NewPageAsync();
            await page.SetUserAgentAsync("PScraper-SiteCrawler");
            await page.SetViewportAsync(new ViewPortOptions() { Width = 1024, Height = 842 });

            var response = await page.GoToAsync(url, new NavigationOptions() { Referer = "PScraper-SiteCrawler", Timeout = timeoutMilliseconds, WaitUntil = new[] { WaitUntilNavigation.Networkidle0 } });
        }

Время ожидания установлено на 30 секунд или 30 000 миллисекунд. Затем я получаю HTML страницы, делая

await reponse.TextAsync()

Мой второй вопрос не имеет отношения, но, вероятно, его проще решить. Один из вариантов, который я рассматривал, - это использование метода page.WaitForSelectorAsync (). Похоже, это ждет, пока загрузится содержимое, которое я ищу, но я не смог выяснить, как получить весь html страницы после того, как это сделано из возврата ElementHandle.

Буду признателен за помощь, попробовал пару маршрутов и не смог выяснить, в чем причина различий между узлом и кодом C #.

1 Ответ

0 голосов
/ 01 апреля 2019

Решил мою проблему. Проблема заключалась в том, как я получал html страницы.

Я использовал ...

await reponse.TextAsync()

Видимо, это дает мне только первоначальный ответ. Когда я изменил свой HTML-код до следующей строки кода, все заработало как положено.

await page.GetContentAsync()
...