Hiển thị các bài đăng có nhãn Webbrowser. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Webbrowser. Hiển thị tất cả bài đăng

Chủ Nhật, 1 tháng 7, 2012

Tự động điền dữ liệu vào texbox và click vào button trong webbrowser control C#

Hôm nay làm cái tool lấy dữ liệu tự động từ 1 trang web. Công việc cần làm là điền dữ liệu input vào 1 textbox sau đó bấm vào button để lấy kết quả trả về. Mình sử dụng webbrowser control giả lập người dùng điền dữ liệu và bấm vào nút lấy kết quả. Sẵn tiện chia sẻ với mọi người cách làm, có thể sử dụng để làm chức năng đăng nhập, post bài tự động.

Để điền dữ liệu vào textbox ta làm như sau:
  1. private void SetText(string elementId, WebBrowser webbrowser, string text)  
  2. {  
  3.     HtmlElement element = webbrowser.Document.GetElementById(elementId);  
  4.     element.InnerText = text;  
  5. }  
Để click vào button sử dụng hàm sau:
  1. private void InvokeClick(string elementId,WebBrowser webbrowser)  
  2. {  
  3.     HtmlElement element = webbrowser.Document.GetElementById(elementId);  
  4.     element.InvokeMember("click");  
  5. }  
Trong đó elementId chính là giá trị của attribute id của thẻ html. Làm sao để có giá trị này thì có thể sử dụng chức năng inspect element của chrome hay các addon của firefox để tìm ^^!.

Mình làm 1 ví dụ về chức năng tự động đăng nhập vào 1 trang web như sau:
- Đầu tiên tìm id của thẻ html nhập username. Ở đây mình giả sử là: txtUserName.
- Tìm id của thẻ html nhập password. Ở đây mình giả sử là txtPassword.
- Tìm id của button đăng nhập. Ở đây mình giả sử là btnLogin.
  1. // chuyển đến trang đăng nhập  
  2. webBrowser1.Navigate("http://hanhtranglaptrinh.com/login.aspx");  
  3. int timeOut = 5;  
  4. DateTime start = DateTime.Now;  
  5. DateTime now = DateTime.Now;  
  6. // đợi load xong trang  
  7. while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)  
  8. {  
  9.     Application.DoEvents();  
  10.     now = DateTime.Now;  
  11.     if ((now - start).TotalMinutes >= timeOut)  
  12.     {  
  13.         // làm cái gì đó  
  14.         throw new Exception("time out");  
  15.     }  
  16. }  
  17. // điền username  
  18. SetText("txtUserName", webBrowser1, "admin");  
  19. // điền pass  
  20. SetText("txtPassword",webBrowser1,"123");  
  21. // nhấn nút đăng nhập  
  22. InvokeClick("btnLogin", webBrowser1);  
Trường hợp trên là đối với các thẻ html có attribute id nên ta sẽ dễ dàng tìm ra đúng thẻ để điền dữ liệu và click vì attribute id là duy nhất. Đối với trường hợp các thẻ html không có attribute id có thể sử dụng các attribute khác như: name, class ... Tuy nhiên các attribute có thể không duy nhất nên sẽ tìm không đúng thẻ html để điền dữ liệu hay click. Ở bài sau mình sẽ hướng dẫn tìm ra thẻ html với các attribute khác.