WaitUntil不等待/在WaitForSelectorAsync上获取HTML

时间:2019-04-01 16:36:19

标签: puppeteer-sharp

有两个问题,请多多指教。过去曾在节点中使用过puppeteer,但由于某些原因,在锐版上遇到了问题。

基本上,我正在爬网的WaitUntil设置为WaitUntilNavigation.Networkidle0,这是最长的等待时间。在我的节点代码中,这可以正确运行并加载我的网站,但是在C#版本中,我得到的页面没有角度加载。从最好的角度来看,我可以确定它不是在等待并返回初始Load状态。下面是我的代码。

        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()方法。这似乎要等到加载我要查找的内容,但是从ElementHandle返回完成此操作后,我仍无法弄清楚如何获取页面的整个html。

在此感谢您的帮助,尝试了一些路线,但无法找出是什么导致了节点和C#代码之间的差异。

1 个答案:

答案 0 :(得分:0)

解决了我的问题。问题是我如何获取页面的html。

我正在使用...

await reponse.TextAsync()

显然,这仅使我得到了最初的答复。当我更改html时,转到下面的代码行,一切正常。

await page.GetContentAsync()