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