2

有两个问题,我会很感激一些建议。过去在node中使用过puppeteer,但由于某种原因,在sharp版本上遇到了问题。

基本上,我正在抓取一个 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() 方法。这似乎要等到我要查找的内容被加载,但是在从 ElementHandle 返回完成之后,我无法弄清楚如何获取页面的整个 html。

在这里希望得到一些帮助,尝试了几条路线,但无法弄清楚是什么导致了节点和 C# 代码之间的差异。

4

1 回答 1

1

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

我在用...

await reponse.TextAsync()

显然,这只能让我得到最初的回应。当我更改我的 html 到以下代码行时,一切都按预期工作。

await page.GetContentAsync()
于 2019-04-01T18:41:45.683 回答