htmlagilitypack和動態內容問題

c# dynamic-content html-agility-pack

嗨,大家好。

我想創建一個web scrapper應用程序,我想用webbrowser控件,htmlagilitypack和xpath。

現在我設法創建xpath生成器(我使用webbrowser為此目的),這工作正常,但有時我不能動態(通過javascript或ajax)生成的內容。另外我發現當webbrowser控件(實際上IE瀏覽器)生成一些額外的標籤,如“tbody”,而htmlagilitypack`htmlWeb.Load(webBrowser.DocumentStream);`沒有看到它。

另一個說明。我發現以下代碼實際上抓住了當前的網頁源代碼,但我無法提供htmlagilitypack`(mshtml.IHTMLDocument3)webBrowser.Document.DomDocument;`

你能幫幫我嗎?謝謝

熱門答案

我花了好幾個小時試圖讓HtmlAgilityPack從網頁上呈現一些ajax動態內容,我從一個無用的帖子轉到另一個,直到我找到了這個。

答案隱藏在初始帖子下的評論中,我認為我應該理順它。

這是我最初使用的方法,但不起作用:

private void LoadTraditionalWay(String url)
{
    WebRequest myWebRequest = WebRequest.Create(url);
    WebResponse myWebResponse = myWebRequest.GetResponse();
    Stream ReceiveStream = myWebResponse.GetResponseStream();
    Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
    TextReader reader = new StreamReader(ReceiveStream, encode);
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.Load(reader);
    reader.Close();
}

WebRequest不會呈現或執行呈現缺少內容的ajax查詢。

這是有效的解決方案:

private void LoadTraditionalWay(String url)
{
    WebRequest myWebRequest = WebRequest.Create(url);
    WebResponse myWebResponse = myWebRequest.GetResponse();
    Stream ReceiveStream = myWebResponse.GetResponseStream();
    Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
    TextReader reader = new StreamReader(ReceiveStream, encode);
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.Load(reader);
    reader.Close();
}

我們的想法是使用能夠呈現ajax內容的WebBrowser加載,然後等待頁面完全呈現,然後使用Microsoft.mshtml庫將HTML重新解析為敏捷包。

這是我可以訪問動態數據的唯一方法。

希望它可以幫到某人




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因