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:
- private void SetText(string elementId, WebBrowser webbrowser, string text)
- {
- HtmlElement element = webbrowser.Document.GetElementById(elementId);
- element.InnerText = text;
- }
Để click vào button sử dụng hàm sau:
- private void InvokeClick(string elementId,WebBrowser webbrowser)
- {
- HtmlElement element = webbrowser.Document.GetElementById(elementId);
- element.InvokeMember("click");
- }
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.
-
- webBrowser1.Navigate("http://hanhtranglaptrinh.com/login.aspx");
- int timeOut = 5;
- DateTime start = DateTime.Now;
- DateTime now = DateTime.Now;
-
- while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
- {
- Application.DoEvents();
- now = DateTime.Now;
- if ((now - start).TotalMinutes >= timeOut)
- {
-
- throw new Exception("time out");
- }
- }
-
- SetText("txtUserName", webBrowser1, "admin");
-
- SetText("txtPassword",webBrowser1,"123");
-
- 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.