如何使用.NET的WebBrowser或mshtml.HTMLDocument动态生成HTML代码?
我读过的关于这个主题的大多数答案都指向System.Windows.Forms.WebBrowser类或来自Microsoft HTML Object Library程序集的COM接口mshtml.HTMLDocument。
WebBrowser类没有引导我到任何地方。以下代码无法检索由我的Web浏览器呈现的HTML代码:
[STAThread]public static void Main(){ WebBrowser wb = new WebBrowser(); wb.Navigate("https://www.google.com/#q=where+am+i"); wb.DocumentCompleted += delegate(object sender, WebBrowserDocumentCompletedEventArgs e) { mshtml.IHTMLDocument2 doc = (mshtml.IHTMLDocument2)wb.Document.DomDocument; foreach (IHTMLElement element in doc.all) { System.Diagnostics.Debug.WriteLine(element.outerHTML); } }; Form f = new Form(); f.Controls.Add(wb); Application.Run(f);}
以上只是一个例子。我真的不想找到一个解决方法来找出我所在城镇的名称。我只需要了解如何以编程方式检索那种动态生成的数据。
(调用新的System.Net.WebClient.DownloadString(“ https://www.google.com/#q=where+am+i ”),将生成的文本保存到某处,搜索您当前所在城镇的名称找到了,如果你能找到它,请告诉我。)
但是,当我从我的网络浏览器(即或Firefox)访问“ https://www.google.com/#q=where+am+i ”时,我会在网页上看到我的城镇名称。在Firefox中,如果我右键单击城镇名称并选择“Inspect Element(Q)”,我会清楚地看到用HTML代码编写的城镇名称,这看起来与WebClient返回的原始HTML完全不同。
在我厌倦了玩System.Net.WebBrowser后,我决定给mshtml.HTMLDocument一个镜头,最后得到同样无用的原始HTML:
public static void Main(){ mshtml.IHTMLDocument2 doc = (mshtml.IHTMLDocument2)new mshtml.HTMLDocument(); doc.write(new System.Net.WebClient().DownloadString("https://www.google.com/#q=where+am+i")); foreach (IHTMLElement e in doc.all) { System.Diagnostics.Debug.WriteLine(e.outerHTML); }}
我想必须有一种优雅的方式来获取这种信息。现在,我能想到的是将一个WebBrowser控件添加到表单中,让它导航到相关的URL,发送键“CLRL,A”,并将页面上显示的任何内容复制到剪贴板并尝试解析它。不过,这是一个可怕的解决方案。
哈士奇WWW