
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
Subscribe
Login
0 Comments
Oldest