2013-10-13 67 views
1

我想从网站中提取一些信息。但是当我导航到它时,它动态加载一个php页面之前使用javascript将我连接到服务器。我可以使用开发人员工具按照Chrome中的顺序进行操作。我想通过Webbrowser控件在C#中重现它是最简单的,只需导航到网站即可。然后webbrowser控件必须包含所有的javascript文件,动态加载的php页面中的文本等等。但是,这是真的,他们存储在控制的地方?我似乎无法找到它们。WebBrowser控件 - 查看导航到网站时加载的文件

+0

你可以给一个网址,我可以试试吗? –

+0

如果页面使用AJAX或其他动态JavaScript,那么确定元素何时准备好就是非确定性的。至少,你应该在页面的'window.onload'被触发后执行web-scrapping。 [此示例](http://stackoverflow.com/a/19063643/1768303)可能是一个很好的起点。 – Noseratio

回答

0

重新创建在Chrome中实现的整个序列图将是很多工作。但是,“从网站中提取一些信息”可以很容易地完成。

声明:我认为这个问题是对WPF的WebBrower控制(这将是对的WinForms几乎相同)

你可以得到HTMLDocument一旦加载页面时,使用:

using mshtml; // <- don't forget to add the reference 

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     browser.Navigate("http://google.com/"); 
     browser.LoadCompleted += browser_LoadCompleted; 
    } 

    void browser_LoadCompleted(object sender, NavigationEventArgs e) 
    { 
     HTMLDocument doc = (HTMLDocument)browser.Document; 
     string html = doc.documentElement.innerHTML.ToString(); 
     // from here, you should be able to parse the HTML 
     // or sniff the HTMLDocument (using HTML Agility Pack for instance)   
    } 
} 

从这个HTMLDocument,你可以访问很多属性,包括HTML元素,CSS样式和脚本。我邀请您设置一个断点并查看最适合您需求的内容。

尽管如此,由于您要加载的页面使用JavaScript来填充其内容,因此在LoadCompleted加注时HTMLDocument可能不会完成。

在这种情况下,我建议使用计时器轮询,直到内容稳定。

您也可以使用HTMLDocument注入自己的JavaScript代码,并调用通过WebBrowser.ObjectForScripting的C#方法,但这会变得更加复杂和难以维护。

相关问题