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

0 0 vote
Article Rating

Nguyễn Hoàng Hải

Hi all! Mình hiện tại đang sinh sống và làm việc tại Hải Phòng, Công việc và niềm đam mê lớn nhất của mình là tạo ra các phần mềm, ứng dụng hữu ích, nâng cao năng suất làm việc của các bạn để đạt hiệu quả cao nhất. Mình viết những bài ở trang này với mong muốn chia sẻ những suy nghĩ và kinh nghiệm của mình trong cuộc sống cũng như công việc hàng ngày. Nếu thấy nó có ích cho bạn hãy comment dưới bài viết đó nhé.

You may also like...

Theo dõi
Notify of
guest
0 Comments
Inline Feedbacks
Xem tất cả bình luận
0
Hãy để lại bình luận cùng trao đổi nhé :Dx
()
x
%d bloggers like this: