C# C根据jquery刮取正确的web内容

C# C根据jquery刮取正确的web内容,c#,jquery,html-agility-pack,scrapysharp,C#,Jquery,Html Agility Pack,Scrapysharp,我使用HtmlAgilityPack已经有一段时间了,但我现在使用的web资源似乎有一个浏览器通过的jQuery协议。我希望加载的是一个产品页面,但实际加载的是由WebBrowser控件验证的,WebClient DownloadString是一个重定向,要求访问者选择一个顾问并与他们注册 换句话说,使用Chrome的Inspect>>Elements工具,我得到: <div data-v-1a7a6550="" class="product-extra-images"> <

我使用HtmlAgilityPack已经有一段时间了,但我现在使用的web资源似乎有一个浏览器通过的jQuery协议。我希望加载的是一个产品页面,但实际加载的是由WebBrowser控件验证的,WebClient DownloadString是一个重定向,要求访问者选择一个顾问并与他们注册

换句话说,使用Chrome的Inspect>>Elements工具,我得到:

<div data-v-1a7a6550="" class="product-extra-images">
  <img data-v-1a7a6550="" src="https://vw-xerophane.storage.googleapis.com:443/thumbnails/products/10174_1MainImage-White-9-14_1.jpg.100x100_q85_crop_upscale.jpg" width="50">
  <img data-v-1a7a6550="" src="https://vw-xerophane.storage.googleapis.com:443/thumbnails/products/10174_2Image2-White-9-14_1.jpg.100x100_q85_crop_upscale.jpg" width="50">
我试过ScrapySharp,如下所述:

但这只会消耗所有可用内存,而不会产生任何结果

还包括: 如上所述,加载了不正确的重定向

我可以提供更多试图提取的源代码,包括完整的jQuery(如果需要)。

使用CaptureRedirect=false;绕过重定向页面。你提到的页面对我很有用:

var web = new HtmlWeb();
web.CaptureRedirect = false;
web.BrowserTimeout = TimeSpan.FromSeconds(15);
现在继续尝试,直到看到页面上的文本产品描述

var doc = web.LoadFromBrowser(url, html =>
{
    return html.Contains("Product Description");
});

HtmlAgilityPack的最新版本可以在后台运行浏览器。因此,我们真的不需要像ScrapySharp这样的库来抓取动态内容。

理论上,最新版本的HtmlAgilityPack有一个名为LoadFromBrowser的方法,在后台运行浏览器。所以我不知道你为什么需要刮胡子。你想刮哪一页?谢谢你的评论!我相信我已经尝试了LoadFromBrowser,但我现在会这样做,并让您知道我的结果。有人建议使用ScrapySharp,正如昨晚对我的帖子的回答:但从那以后,我对这个问题了解了更多。这里有一个例子,我正试图刮:真棒的建议!不幸的是,我试过了,但它超时了。将超时增加到30,然后再增加0,仍然超时,只是在没有产品的情况下继续运行。System.Exception:'WebBrowser执行超时已过期。操作完成前经过的超时时间。若要避免此错误,请增加WebBrowserTimeout值或将其设置为0 unlimited。'有时此服务器运行缓慢或卡住。在15秒的超时时间内,它在我的测试中运行了7次中的4次。url是,您介意分享为您工作的完整代码吗?对不起,我想我的努力已经开始抑制我发布代码的想法。我成功了。你真是个天才!非常感谢。啊,这是有道理的,因为若你们不包含那个位,它会重定向到错误页面,而错误页面不包含产品描述,所以它会引发超时错误。我刚尝试在我的internet浏览器中不使用//时,page说您似乎还没有选择顾问!。
var web = new HtmlWeb();
web.CaptureRedirect = false;
web.BrowserTimeout = TimeSpan.FromSeconds(15);
var doc = web.LoadFromBrowser(url, html =>
{
    return html.Contains("Product Description");
});