2011-06-05 257 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引擎。