我的想法是完全模擬人工操作,但是遇到一個困難:怎樣快速定位網頁輸入框。另外,這種模擬人工操作的方法效率較低。求一個效率高一點的方法
uj5u.com熱心網友回復:
實作HTTP協議,這有HTTP的例子WebClnt,你看看:http://download.csdn.net/detail/geoff08zhang/4571358
uj5u.com熱心網友回復:
找HTML代碼中的form、input之類,把表單的結構提取出來,然后自己生成一個GET或POST請求發給服務器就行了uj5u.com熱心網友回復:
這個用c#很容易實作,用BCB的話要呼叫ihtml api比較復雜,給你個c#的資料 。在.Net 2.0中,整個HTML檔案以及其包含的各個HTML元素,都和一個個HtmlDocument、HtmlElement之類的.Net物件對應。因此只要找到這個“關閉”按鈕對應的HtmlElement物件,為其click事件添加Event Handler即可。
HTML code
<html><body><input type="button" id="btnClose" value="https://bbs.csdn.net/topics/關閉"/></body></html>
那么找出該按鈕并為之添加Event Handler的代碼如下:
C# codeHtmlDocument htmlDoc = webBrowser.Document; HtmlElement btnElement = htmlDoc.All["btnClose"]; if (btnElement !=null) { btnElement.click+=new HtmlElementEventHandler(HtmlBtnClose_Click); }
其中 HtmlBtnClose_Click是按下Web按鈕時的Event Handler。
很簡單吧?那么稍稍高級一點的——我們都知道一個HTML元素可能有很多各種各樣的事件,而HtmlElement這個類只給出最常用、共通的幾 個。那么,如何回應其他事件呢?這也很簡單,只需要呼叫HtmlElement的AttachEventHandler就可以了:
C# codebtnElement.AttachEventHandler("onclick", new EventHandler(HtmlBtnClose_Click)); //這一句等價于上面的 btnElement.click += new HtmlElementEventHandler(HtmlBtnClose_Click);
對于其他事件,把"onclick"換成該事件的名字就可以了。例如:
C# code
formElement.AttachEventHandler("onsubmit", new EventHandler(HtmlForm_Submit));
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
要使我們的WebBrowser具有自動填表、甚至自動提交的功能,并不困難。
假設有一個最簡單的登錄頁面,輸入用戶名密碼,點“登錄”按鈕即可登錄。已知用戶名輸入框的id(或Name,下同)是username,密碼輸入 框的id是password,“登錄”按鈕的id是submitbutton,那么我們只需要在webBrowser的 DocumentCompleted事件中使用下面的代碼即可:
C# codeHtmlElement btnSubmit = webBrowser.Document.All["submitbutton"]; HtmlElement tbUserid = webBrowser.Document.All["username"]; HtmlElement tbPasswd = webBrowser.Document.All["password"]; if (tbUserid ==null|| tbPasswd ==null|| btnSubmit ==null) return; tbUserid.SetAttribute("value", "smalldust"); tbPasswd.SetAttribute("value", "12345678"); btnSubmit.InvokeMember("click");
這里我們用SetAttribute來設定文本框的“value”屬性,用InvokeMember來呼叫了按鈕的“click” 方法。因為不同的Html元素,其擁有的屬性和方法也不盡相同,所以.Net 2.0提供了統一的HtmlElement來概括各種Html元素的同時,提供了這兩個方法以呼叫元素特有的功能。關于各種Html元素的屬性和方法一 覽,可以查閱MSDN的DHTML Reference。
※關于表單的提交,的確還有另一種方法就是獲取form元素而不是button,并用form元素的 submit方法:
C# codeHtmlElement formLogin = webBrowser.Document.Forms["loginForm"]; //……formLogin.InvokeMember("submit");本文之所以沒有推薦這種方法,是因為現在的網頁,很多都在submit按鈕上添加onclick事件,以對提交的內容做最基本的驗證。如果直接使用form的submit方法,這些驗證代碼就得不到執行,有可能會引起錯誤
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/146067.html
標籤:網絡及通訊開發
