2011-06-05 262 views
1

是否可以抓取動態網頁生成的數據?我的意思是比如This website一些Java腳本是在C中刮動態網頁內容#

document.write("<font class=spy2>:<\/font>"+(v2j0j0^o5r8)+(r8d4x4^y5i9)+(b2r8e5^u1p6)+(r8d4x4^y5i9)) 

的值更改每個頁面刷新生成標籤<font>。每個生成的代碼都表示一個從0到9的數字,例如(code1)+(code2)+(code3)+(code4),並在後端寫入某種類型的分析程序,它可以理解它並相應地生成數字。

一旦頁面被渲染,例如code1被設置爲數字4的位置,其中數字4生成的位置在其被解析後來自該代碼。

如果我們使用HtmlAgilityPack,我們會看到該java腳本代碼,但沒有看到它的生成輸出。有什麼方法可以讀取頁面呈現時創建的標記嗎?

回答

0

感謝您指出。我看到通過實現同樣的結果,但看到一個更多的評論誰說使用IE引擎我轉身,並做了一個小應用程序,做這項工作。我添加IE瀏覽器並將其導航到網站並讀取content.Here是代碼

private void webBrowser1_DocumentCompleted(object sender, System.Windows.Forms.WebBrowserDocumentCompletedEventArgs e) 
     { 
    System.Windows.Forms.HtmlElementCollection elementsforViewPost = 
           webBrowser1.Document.GetElementsByTagName("font"); 
    foreach (System.Windows.Forms.HtmlElement current2 in elementsforViewPost) 
    { 
    if (current2.InnerText != null && CheckForValidProxyAddress(current2.InnerText) && 
        ObtainedProxies.Where(index=>index.ProxyAddress == current2.InnerText.Trim()).ToList().Count == 0) 
{ 
    Proxy data = new Proxy(); 
    data.IsRetired = false; 
    data.IsActive = true; 
    int result = 1;     

    data.DomainsVisited = 0; 
    data.ProxyAddress = current2.InnerText.Trim(); 

    ObtainedProxies.Add(data); 
} 

併爲接收的文本是有效的代理檢查這裏是我做的一些網頁通過谷歌搜索

private bool CheckForValidProxyAddress(string address) 
     { 

     //create our match pattern 
     //string pattern = @"^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$:([0-9][0-9][0-9][0-9])"; 
     string pattern = @"\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b\:[0-9]{0,4}"; 
     //create our Regular Expression object 
     Regex check = new Regex(pattern); 
     //boolean variable to hold the status 
     bool valid = false; 
     //check to make sure an ip address was provided 
     if (address == "") 
     { 
      //no address provided so return false 
      valid = false; 
     } 
     else 
     { 
      //address provided so use the IsMatch Method 
      //of the Regular Expression object 
      valid = check.IsMatch(address, 0); 
     } 
     //return the results 
     return valid; 
    } 
+0

我不明白httpwebrequest是如何做到這一點的。 – user310291 2011-06-05 19:42:12

+0

完美...........作品像魅力 – 2011-06-05 20:00:16

0

得到它不久前,我想你」不得不使用IE引擎。