Sử dụng GeckoFx để tìm kiếm vị trí từ khóa trên google

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

Nguyễn Hoàng Hải
Nguyễn Hoàng Hải
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é.
0 0 votes
Đánh giá bài viết

You may also like...

Theo dõi
Notify of

0 Góp ý
Inline Feedbacks
Xem tất cả bình luận