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.

7 nhận xét :

  1. bạn ơi cho mình hỏi, làm sao để lấy các giá trị của textbox và combobox trong webbrowser vậy? mình muốn làm 1 trang đăng ký, khi đăng ký thành công thì mình lấy lại các giá trị đó lưu lại vào trong csdl.

    Trả lờiXóa
  2. Bạn ơi. hướng dẫn tiếp cái click với Attribute khác đi nhỷ :)

    Trả lờiXóa
  3. có demo code ko bạn post cho tham khảo với ạ

    Trả lờiXóa
  4. điền dữ liệu vào combobox với radiobutton như thế nào ?

    Trả lờiXóa
  5. cho mềnh xin yahoo học hỏi được không bạn? :)

    Trả lờiXóa
  6. nó bị lỗi này là sao Object reference not set to an instance of an object.'
    ?

    Trả lờiXóa
  7. hướng dẫn em làm cái phần mềm tự động đăng kí và đăng tin với ạ

    Trả lờiXóa