1

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

4

1 回答 1

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 代码,并通过调用 C# 方法WebBrowser.ObjectForScripting,但这会更加复杂且难以维护。

于 2013-10-13T09:27:53.780 回答