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