Mình sẽ làm 1 ví dụ về việc sử dụng GeckoFx để tìm kiếm vị trí từ khóa trên google giống như ứng dụng Phần mềm kiểm tra vị trí từ khóa trên google nhé.
Về việc cài đặt thư viện thì các bạn có thể tham khảo tại đây: Sử dụng GeckoFx thay thế cho webbrowser control
Chương trình có giao diện giống như hình trên
public partial class Form1 : Form { public Form1() { InitializeComponent(); Gecko.Xpcom.Initialize(Application.StartupPath + "\\firefox"); } private void Form1_Load(object sender, EventArgs e) { } private void btnTimKiem_Click(object sender, EventArgs e) { //Chuyển hướng đến trang google geckoWebBrowser1.Navigate("http://google.com.vn"); //Thêm sự kiện để đợi trang google load xong mới nhập từ khóa geckoWebBrowser1.DocumentCompleted += new EventHandler<Gecko.Events.GeckoDocumentCompletedEventArgs>(geckoWebBrowser1_NhapTuKhoa); } //Sự kiện trang google load xong và nhập từ khóa void geckoWebBrowser1_NhapTuKhoa(object sender, Gecko.Events.GeckoDocumentCompletedEventArgs e) { //Xóa luôn sự kiện này tránh tình trạng loop geckoWebBrowser1.DocumentCompleted -= geckoWebBrowser1_NhapTuKhoa; //Tìm đối tượng text input có name là q đầu tiên Gecko.DOM.GeckoInputElement _input = (Gecko.DOM.GeckoInputElement)geckoWebBrowser1.Document.GetElementsByName("q")[0]; //Gắn giá trị cho text input vừa tìm thấy với giá trị ô txtTuKhoa.text _input.Value = txtTuKhoa.Text; //Đợi trước khi bấm nút search theo số giây đã nhập trên ô txtThoiGianNgungTruocKhiSearch Application.DoEvents(); System.Threading.Thread.Sleep((int)txtThoiGianNgungTruocKhiSearch.Value * 1000); //Submit form _input.Form.submit(); //Add sự kiện chuyển trang tìm kiếm geckoWebBrowser1.DocumentCompleted += new EventHandler<Gecko.Events.GeckoDocumentCompletedEventArgs>(geckoWebBrowser1_TimViTri); //Reset lại vị trí và số trang TrangHienTai = 1; ViTriHienTai = 1; } private int TrangHienTai = 1; private int ViTriHienTai = 1; void geckoWebBrowser1_TimViTri(object sender, Gecko.Events.GeckoDocumentCompletedEventArgs e) { //Lấy danh sách thẻ div class g để duyệt và phân tích Gecko.GeckoNodeCollection arrNode = geckoWebBrowser1.Document.GetElementsByClassName("g"); foreach (Gecko.GeckoHtmlElement item in arrNode) { //Lấy link của kết quả tìm kiếm, thẻ a nằm trong thẻ h3 Gecko.DOM.GeckoAnchorElement _link = (Gecko.DOM.GeckoAnchorElement)item.GetElementsByTagName("h3")[0].GetElementsByTagName("a")[0]; //So sánh với tên trang web trên kia nếu có thì đã tìm thấy vị trí if (_link.GetAttribute("href").ToLower().IndexOf(txtTrangWeb.Text.ToLower()) >= 0) { //Cuộn đến vị trí cần xem và tạo border xung quanh nó item.ScrollIntoView(true); item.Style.CssText = "border:3px solid red;margin-top:20px;padding:15px;"; item.InnerHtml = "<h3 style='font-weight:bold;color:red;font-size:18px;'>Vị trí: " + ViTriHienTai + "</h3><br/>" + item.InnerHtml; //Hiển thị vi trí kết quả và hủy sự kiện này tránh loop MessageBox.Show("Đã tìm thấy vị trí thứ " + ViTriHienTai + " !"); geckoWebBrowser1.DocumentCompleted -= geckoWebBrowser1_TimViTri; return; } //Tăng vị trí hiện tại lên 1 nếu chưa ViTriHienTai += 1; } //Nếu số trang đã tới giới hạn thì thông báo không tìm thấy kết quả if (TrangHienTai == txtGioiHanSoTrang.Value) { MessageBox.Show("Không tìm thấy vị trí !"); geckoWebBrowser1.DocumentCompleted -= geckoWebBrowser1_TimViTri; return; } //Kiểm tra có tồn tại nút Tiếp hay không Gecko.GeckoNodeCollection arrNodePage = geckoWebBrowser1.Document.GetElementsByClassName("fl"); int num; bool isNum = Int32.TryParse(arrNodePage[arrNodePage.Length-1].TextContent, out num); if (isNum) { MessageBox.Show("Đã hết kết quả Search, Không tìm thấy vị trí !"); geckoWebBrowser1.DocumentCompleted -= geckoWebBrowser1_TimViTri; return; } else { TrangHienTai += 1; ((Gecko.DOM.GeckoAnchorElement)arrNodePage[arrNodePage.Length - 1]).Click(); } } }
Cùng xem kết quả nào:
Link mã nguồn chương trình: https://drive.google.com/open?id=0B68_ejhDXR0wUjlPWTVTRVNXNDA
Liên hệ: Mr. Hải - Zalo/Phone: 0902.035.028 - hainh2k3@gmail.com
-
Với nhiều năm kinh nghiệm và làm việc trực tiếp xây dựng các hệ thống website, phần mềm quản lý, kế toán, kho, bán hàng, ERP, điều hành, giám sát và quản lý sản xuất như MES, Andon, mobile … Mình hoàn toàn tự tin có thể tư vấn cũng như hỗ trợ các bạn các giải pháp, vấn đề bạn quan tâm.
Mình cũng có mong muốn hợp tác, trao đổi, cùng làm với các bạn có ý tưởng phát triển dự án thú vị, hãy liên hệ với mình ngay nhé.
Bài mới đăng
Theo dõi
0 Comments
Thích nhất