2011-11-26 31 views
-1

這裏是網頁上的代碼:如何點擊網頁C#中的鏈接

<div id="dl_link" style="display: block;"> 
<a href="/get?video_id=KMU0tzLwhbE&h=3713fa1cb8c500381a1edaaf80a06ab5"> 
<b>Download</b> 

,但我不知道如何編寫C#中該鏈接的點擊。

這幾乎是我迄今爲止;

private void button1_Click(object sender, EventArgs e) 
{ 
    webBrowser1.Document.GetElementById("youtube-url").SetAttribute("value", textBox1.Text); // put text into textbox 
    webBrowser1.Document.GetElementById("submit").InvokeMember("onclick"); // click convert video button 
} 

private void button2_Click(object sender, EventArgs e) 
{ 
    HtmlElement downloadlink = webBrowser1.Document.GetElementById("href="); //wrong 
    downloadlink.InvokeMember("onclick"); //wrong 
} 

我完全失去了如何執行最後一步。請幫忙。

+2

發送HTTP GET到底層url – sll

+0

這是一種XY問題嗎? http://www.perlmonks.org/?node_id=542341 –

+0

一旦它被呈現給客戶端,服務器端ASP.Net代碼*不能*點擊鏈接。你試圖完成什麼? – Amy

回答

1

由於您的鏈接只是一個普通的鏈接,沒有附加JS代碼,您可以使用webBrowser1.Navigate(downloadlink.GetAttribute("href"));;

編輯:要獲得downloadlink使用webBrowser1.Document.GetElementById("dl_link").All[0]

+0

它可能是鏈接有一些事件處理程序動態附加從JavaScript頁面源不明顯,在這種情況下,此解決方案可能會導致問題。也許最好使用HtmlElement.RaiseEvent(),但我從來沒有這樣做,所以不想作爲回答發佈:o) –

+0

如果在外部腳本中設置了該鏈接上的任何'onclick'處理函數,'InvokeMember (「點擊」)或者「RaiseEvent」會起作用,但是Andrew寫道它沒有。 – MagnatLU

+0

好點。無論如何,在研究它之後,RaiseEvent()也不會起作用。它只會導致在JavaScript中定義的事件處理函數被調用 - 與InvokeMember()非常相似,所以您的答案是最好的。 –

0

你可以把它用WatiN,如果你是不是過分關注性能自動化。

using (var browser = new IE("http://stackoverflow.com")){ 
    var link = browser.Divs.First(Find.ById("dl_link")).Links.First(); 
    link.Click(; 
}