这几乎是一个完整的猜测,但是:
- 您可能必须等到文档实际加载后才能获取您的内容。
- 您需要获取正确的内容(“A”标签)
通过http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.documentcompleted.aspx,我猜下面的代码可能有效:
首先,设置一个事件处理程序:
// Add an event handler that processes the document after it loads.
webBrowser1.DocumentCompleted +=
new WebBrowserDocumentCompletedEventHandler(ProcessDocument);
在别处,定义处理程序(以及需要发生的事情)
private void ProcessDocument(object sender,
WebBrowserDocumentCompletedEventArgs e)
{
var webBrowser1 = (WebBrowser)sender;
HtmlElementCollection links = webBrowser1.Document.GetElementsByTagName("A");
foreach (HtmlElement link in links)
{
MessageBox.Show(link.GetAttribute("href"));
}
}
最后:
webBrowser1.Navigate(myurl);
问题是,msdn 文档没有说明文档“完全加载”之前必须发生的事情。
编辑:我终于在 LinqPad 中尝试过了,它看起来并没有暴露与“窗口加载”事件相关的任何内容,至少直接暴露。我敢打赌 DocumentCompleted 事件的触发更像是“DOMReady”事件。下面是一个 hack,但它出现在 DocumentTitleChange 事件的第三次调用中,它抓取了 href 的内容。请注意第三次调用它的原因是我有更改标题的javascript!
void Main()
{
WebBrowser webBrowser1 = new WebBrowser();
webBrowser1.DocumentTitleChanged +=
new EventHandler(ProcessDocument);
webBrowser1.Navigate("http://localhost/test/test.html");
Console.ReadLine();
}
// Define other methods and classes here
private void ProcessDocument(object sender,
EventArgs e)
{
var webBrowser1 = (WebBrowser)sender;
Console.WriteLine("ProcessDocument BEGIN");
HtmlElementCollection links = webBrowser1.Document.GetElementsByTagName("A");
foreach (HtmlElement link in links)
{
Console.WriteLine(link.GetAttribute("href"));
}
Console.WriteLine("ProcessDocument END");
Console.Out.Flush();
}
你的html在哪里:
<HTML>
<HEAD>
<TITLE>Test for me</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8" />
<SCRIPT LANGUAGE="JavaScript">
<!--
function foo()
{
var result = document.getElementById('result');
result.innerHTML =
"<br><center><font size=+1><a href='MyMain.aspx' target='_parent'>Back to My Main Page</a></font><br>"
+ "<font size=+2><b><a href='http://MySub.asp'>Launch My Application</a></b></font></center>";
document.title += "Hack..Aacklgahala, ribbit";
}
-->
</SCRIPT>
</HEAD>
<BODY onload="foo()">
<a href="http://google.com">bar</a>
<div id="result" />
</BODY>
</HTML>