WaitUntil 不等待/在 WaitForSelectorAsync 上获取 HTML
WaitUntil not waiting / Get HTML on WaitForSelectorAsync
有两个问题,我希望得到一些建议。过去在 node 中使用过 puppeteer,但由于某些原因,运行 在 sharp 版本上出现问题。
基本上,我正在抓取 WaitUntil 设置为 WaitUntilNavigation.Networkidle0(最长等待期)的网页。在我的节点代码中,这会正确运行并加载我的网站,但在 C# 版本中,我得到的页面没有 angular 加载。据我所知,它不是在等待 return 进入初始加载状态。下面是我的代码。
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 return 完成此操作后,我无法弄清楚如何获取页面的整个 html .
在此希望得到一些帮助,尝试了几种方法,但未能弄清楚是什么导致了节点和 C# 代码之间的差异。
解决了我的问题。问题是我如何获得页面的 html。
我正在使用...
await reponse.TextAsync()
显然,这让我得到了最初的回应。当我更改我的 html 进入以下代码行时,一切都按预期工作。
await page.GetContentAsync()
有两个问题,我希望得到一些建议。过去在 node 中使用过 puppeteer,但由于某些原因,运行 在 sharp 版本上出现问题。
基本上,我正在抓取 WaitUntil 设置为 WaitUntilNavigation.Networkidle0(最长等待期)的网页。在我的节点代码中,这会正确运行并加载我的网站,但在 C# 版本中,我得到的页面没有 angular 加载。据我所知,它不是在等待 return 进入初始加载状态。下面是我的代码。
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 return 完成此操作后,我无法弄清楚如何获取页面的整个 html .
在此希望得到一些帮助,尝试了几种方法,但未能弄清楚是什么导致了节点和 C# 代码之间的差异。
解决了我的问题。问题是我如何获得页面的 html。
我正在使用...
await reponse.TextAsync()
显然,这让我得到了最初的回应。当我更改我的 html 进入以下代码行时,一切都按预期工作。
await page.GetContentAsync()