WebBrowser控件 - 查看导航到网站时加载的文件

时间:2013-10-13 07:42:42

标签: c# webbrowser-control

我正在尝试从网站中提取一些信息。但是当我导航到它时,它会在动态加载php页面之前使用javascript将我连接到服务器。我可以使用开发人员工具按照Chrome中的顺序进行操作。我认为使用Webbrowser控件在C#中重现它并简单地导航到网站是最容易的。然后webbrowser控件必须包含所有javascript文件,动态加载的php页面中的文本等等。但这是真的吗?它们在控制中存储在哪里?我似乎无法找到它们。

1 个答案:

答案 0 :(得分: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来填充其内容,HTMLDocument可能会在LoadCompleted加注时完成。

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

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