這幾乎是一個完整的猜測,但:
- 你很可能將不得不等待,直到文件實際 在抓取您的內容之前加載。
- 你需要搶權 內容(「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」事件。以下是一些破解,但它出現在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>
我編輯了自己的冠軍。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –
窗口加載函數真的是'function window :: onload()'?這不是JavaScript ......我不知道那是什麼。 – JayC