本代码只是业余时间无聊写着试试,用WebBrowser组件模拟人工运行搜索引擎自动点击搜索结果的实验
这是网络中盛传的提高搜索引擎点击率的一种方式,当然属于作弊,不推荐各位使用。另外这种方式的性能不佳,往往因为网络及本地机器的原因中途当机。当然如果只是写这游戏一下那是无妨。这里只是提供了其中的一种原理,方法还有很多。如果此方式继续优化详细写下去的话可能需要涉及到vpn定时更改ip地址到问题,当然现在即便是vpn也有办法逆向找到原始的ip地址。
代码示例如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Web;
using System.Threading;
namespace WinApp_huashanlin
{
public partial class FormHits : Form
{
public FormHits()
{
InitializeComponent();
webBrowser_huashanlin.Navigate("http://www.baidu.com",false);
}
private void button2_Click(object sender, EventArgs e)
{
//设置要搜索的关键词
string huashanlin_keys = "C#";
//选取百度搜索作为实验例子,将webBrowser导航到百度搜索主页
webBrowser_huashanlin.Navigate("http://www.baidu.com", false);
//模拟人工查看或输入关键词等行为需要的3秒
Thread.Sleep(3000);
//找到页面中输入关键字的input标签
HtmlElement key0s = webBrowser_huashanlin.Document.All["kw"];
//为input标签输入value值
key0s.SetAttribute("value", huashanlin_keys);
//找到页面中button或者submit按钮
HtmlElement hit = webBrowser_huashanlin.Document.All["su"];
//触发搜索按钮的click事件
hit.InvokeMember("click");
//模拟人查看搜索结果需要3秒时间
Thread.Sleep(9000);
//设置需要在搜索结果中查找到的url地址
string url = "http://baike.baidu.com/view/6590.htm";
//对需要查找的url进行编码
string encodurl = System.Web.HttpUtility.UrlDecode(url, System.Text.Encoding.Unicode);
bool isget = false;
//匹配页面中所有标签为A超链接的href属性,如果匹配到则触发该超链接的click事件
for (int i = 0; i < webBrowser_huashanlin.Document.All.Count; i++)
{
if (webBrowser_huashanlin.Document.All[i].TagName.ToString().Trim() == "A")
{
string tmpeurl = webBrowser_huashanlin.Document.All[i].GetAttribute("href").ToString();
tmpeurl = System.Web.HttpUtility.UrlDecode(tmpeurl, System.Text.Encoding.Unicode);
if (tmpeurl == encodurl)
{
isget = true;
//webBrowserhuashanlin.Document.All[i].SetAttribute("target", "_self");//在同一个webBrowserhuashanlin浏览器组件中打开页面,便于后续操作。
webBrowser_huashanlin.Document.All[i].InvokeMember("click");//自动点击你所设置的页面
break;
}
}
}
if (!isget)
{
//如果百度搜索结果的第一页中没有找到设置的url,则寻找到该页面中“下一页”的超链接并触发click事件,
//在下一个十条搜索结果中重复以上的步骤继续搜索匹配,这里可以把该代码整理整理成为一个递归函数循环的调用,直到找到目标位置。
//每个操作之间设置一个等待时间模拟人工等待的时间,同时也是为可能的网络状况留一个缓冲的余地
//以上对设置的url只是进行简单的匹配,实际使用情况下需要进一步需要编写匹配方法,诸如正则验证等等
}
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Web;
using System.Threading;
namespace WinApp_huashanlin
{
public partial class FormHits : Form
{
public FormHits()
{
InitializeComponent();
webBrowser_huashanlin.Navigate("http://www.baidu.com",false);
}
private void button2_Click(object sender, EventArgs e)
{
//设置要搜索的关键词
string huashanlin_keys = "C#";
//选取百度搜索作为实验例子,将webBrowser导航到百度搜索主页
webBrowser_huashanlin.Navigate("http://www.baidu.com", false);
//模拟人工查看或输入关键词等行为需要的3秒
Thread.Sleep(3000);
//找到页面中输入关键字的input标签
HtmlElement key0s = webBrowser_huashanlin.Document.All["kw"];
//为input标签输入value值
key0s.SetAttribute("value", huashanlin_keys);
//找到页面中button或者submit按钮
HtmlElement hit = webBrowser_huashanlin.Document.All["su"];
//触发搜索按钮的click事件
hit.InvokeMember("click");
//模拟人查看搜索结果需要3秒时间
Thread.Sleep(9000);
//设置需要在搜索结果中查找到的url地址
string url = "http://baike.baidu.com/view/6590.htm";
//对需要查找的url进行编码
string encodurl = System.Web.HttpUtility.UrlDecode(url, System.Text.Encoding.Unicode);
bool isget = false;
//匹配页面中所有标签为A超链接的href属性,如果匹配到则触发该超链接的click事件
for (int i = 0; i < webBrowser_huashanlin.Document.All.Count; i++)
{
if (webBrowser_huashanlin.Document.All[i].TagName.ToString().Trim() == "A")
{
string tmpeurl = webBrowser_huashanlin.Document.All[i].GetAttribute("href").ToString();
tmpeurl = System.Web.HttpUtility.UrlDecode(tmpeurl, System.Text.Encoding.Unicode);
if (tmpeurl == encodurl)
{
isget = true;
//webBrowserhuashanlin.Document.All[i].SetAttribute("target", "_self");//在同一个webBrowserhuashanlin浏览器组件中打开页面,便于后续操作。
webBrowser_huashanlin.Document.All[i].InvokeMember("click");//自动点击你所设置的页面
break;
}
}
}
if (!isget)
{
//如果百度搜索结果的第一页中没有找到设置的url,则寻找到该页面中“下一页”的超链接并触发click事件,
//在下一个十条搜索结果中重复以上的步骤继续搜索匹配,这里可以把该代码整理整理成为一个递归函数循环的调用,直到找到目标位置。
//每个操作之间设置一个等待时间模拟人工等待的时间,同时也是为可能的网络状况留一个缓冲的余地
//以上对设置的url只是进行简单的匹配,实际使用情况下需要进一步需要编写匹配方法,诸如正则验证等等
}
}
}
}