相信大家身边有很多朋友有时候请大家投各种票,刚好,这会儿也有朋友找我投票,身为IT程序开发人员,总觉得投机取巧一点。
如果仅仅只是点击即可投票,那相对而言就简单了,然而,有些网站限制IP,那么情况就不一样了。
如果您是拨号上网用户,可以重连路由,改变外网IP地址,不过,这种方式有时候也不奏效。
于是我采用了IP代理的方式来自动投票。
这样,一般人会这样:更改IE浏览器的代理设置,打开IE浏览器输入投票网址(这里需要各位自己找直接投票的url)投票。
但是问题又出来了,每次投票都得重启浏览器才行,我个人觉得浏览器打开的一些设置已经保存在了缓存中
虽然在更改代理的时候更改了注册表项值,但浏览器并没有实时去读取这个值
因此,鄙人编写了一个小程序用于自动投票。下面是该程序的关键代码:
投票实例,服务器有点慢,可能需要等十几秒钟,弹框提示即可
http://www.zuiui.com/dream.html
如果兄弟投了,鄙人十分感谢,好啦,咱们还是交流学习吧:
如果仅仅只是点击即可投票,那相对而言就简单了,然而,有些网站限制IP,那么情况就不一样了。
如果您是拨号上网用户,可以重连路由,改变外网IP地址,不过,这种方式有时候也不奏效。
于是我采用了IP代理的方式来自动投票。
这样,一般人会这样:更改IE浏览器的代理设置,打开IE浏览器输入投票网址(这里需要各位自己找直接投票的url)投票。
但是问题又出来了,每次投票都得重启浏览器才行,我个人觉得浏览器打开的一些设置已经保存在了缓存中
虽然在更改代理的时候更改了注册表项值,但浏览器并没有实时去读取这个值
因此,鄙人编写了一个小程序用于自动投票。下面是该程序的关键代码:
投票实例,服务器有点慢,可能需要等十几秒钟,弹框提示即可
http://www.zuiui.com/dream.html
如果兄弟投了,鄙人十分感谢,好啦,咱们还是交流学习吧:
程序代码:
private
void StartVote()
{
this.lbl_daili.Text = lst.Items.Count.ToString(); // 获取代理
this.wbCnblog.Focus(); // 浏览器窗口获取焦点。由于有些投票连接直接弹出alert提示,因此获取焦点,以自动回车防止程序暂停
int itemcount = lst.Items.Count; // 获取代理列表,已循环代理访问
string[] urls = new string[itemcount]; // 用于保存所有将要访问的投票链接地址
string[] proxyurl_ip = new string[itemcount]; // 代理 IP
string[] proxyurl_port = new string[itemcount]; // 代理 Port
Random rad = new Random();
int y = rad.Next( 0, 72); // 由于有些网站投票需要限制用户名,因此随即生成用户名(数组)
for ( int i = 0; i < itemcount; i++)
{
int x = y + i;
if (x >= 72)
{
x = x % 72;
}
urls[i] = " http://www.xxoo.com?name= " + mingzi[x];
lst.Items[i].Selected = true; // 选择当前item,提取IP 以及 端口号,保存在数组中
proxyurl_ip[i] = lst.SelectedItems[ 0].SubItems[ 0].Text;
proxyurl_port[i] = lst.SelectedItems[ 0].SubItems[ 1].Text;
}
GetHtml(urls, proxyurl_ip, proxyurl_port); // 访问站点获取站点内容
Application.Exit(); // 程序结束
}
{
this.lbl_daili.Text = lst.Items.Count.ToString(); // 获取代理
this.wbCnblog.Focus(); // 浏览器窗口获取焦点。由于有些投票连接直接弹出alert提示,因此获取焦点,以自动回车防止程序暂停
int itemcount = lst.Items.Count; // 获取代理列表,已循环代理访问
string[] urls = new string[itemcount]; // 用于保存所有将要访问的投票链接地址
string[] proxyurl_ip = new string[itemcount]; // 代理 IP
string[] proxyurl_port = new string[itemcount]; // 代理 Port
Random rad = new Random();
int y = rad.Next( 0, 72); // 由于有些网站投票需要限制用户名,因此随即生成用户名(数组)
for ( int i = 0; i < itemcount; i++)
{
int x = y + i;
if (x >= 72)
{
x = x % 72;
}
urls[i] = " http://www.xxoo.com?name= " + mingzi[x];
lst.Items[i].Selected = true; // 选择当前item,提取IP 以及 端口号,保存在数组中
proxyurl_ip[i] = lst.SelectedItems[ 0].SubItems[ 0].Text;
proxyurl_port[i] = lst.SelectedItems[ 0].SubItems[ 1].Text;
}
GetHtml(urls, proxyurl_ip, proxyurl_port); // 访问站点获取站点内容
Application.Exit(); // 程序结束
}
程序代码:
访问站点获取HTML:
#region 自定义方法
bool loading = true; // 该变量表示网页是否正在加载.
string html = string.Empty;
WebBrowser browser = new WebBrowser();
int successcount = 0;
int failurecount = 0;
int bugcount = 0;
string temp_proxy = "";
string current_proxy = ""; // 当前代理,用于些日志用到,相当于排他锁的作用
public void GetHtml( string[] urls, string[] proxyurls_ip, string[] proxyurls_port)
{
wbCnblog.DocumentText = " 页面加载中... ";
wbCnblog.Navigated += new WebBrowserNavigatedEventHandler(browser_Navigated); // 页面加载时执行 browser_Navigated ,获取返回内容,并写成功日志
for ( int i = 0; i < urls.Length; i++)
{
loading = true; // 表示正在加载
NaviByProxy( // 代理访问URL
proxyurls_ip[i], // 选中的代理IP地址
proxyurls_port[i], // 选中的代理IP的端口
urls[i] // url地址
);
while (loading) // 记录状态
{
this.txt_info.Text = " 正通过代理 " + proxyurls_ip[i] + " : " + proxyurls_port[i] + " 进行投票 ";
this.textBox_url.Text = urls[i];
current_proxy = proxyurls_ip[i] + " : " + proxyurls_port[i];
try
{
Application.DoEvents(); // 等待本次加载完毕才执行下次循环.
}
catch
{
bugcount++;
this.txt_result.Text = " 成功 " + successcount + " 个 " + " /失败 " + failurecount + " 个/错误 " + bugcount + " 个 ";
continue;
}
}
}
this.txt_result.Text += " 此轮投票已经结束 ";
}
#endregion
以下代码则是 加载内容:
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
// Create by Charles 2012-11-25 13:23
void browser_Navigated( object sender, WebBrowserNavigatedEventArgs e)
{
if (current_proxy != temp_proxy) // 排他锁的作用
{
html = wbCnblog.DocumentText; // 获取到的html.
this.wbCnblog.DocumentText = "";
if (html.Contains( " 生活快乐 "))
{
// this.txt_result.Text += html;
this.txt_status.Text = " 成功 ";
successcount++;
this.txt_result.Text = " 成功 " + successcount + " 个 " + " /失败 " + failurecount + " 个/错误 " + bugcount + " 个 ";
this.txt_success.Text += current_proxy + " | ";
WriteText(current_proxy + " ----投票成功---- " + DateTime.Now + Environment.NewLine); // 写日志文件
}
else
{
this.txt_status.Text = " 失败 ";
failurecount++;
this.txt_result.Text = " 成功 " + successcount + " 个 " + " /失败 " + failurecount + " 个/错误 " + bugcount + " 个 ";
}
loading = false; // 在加载完成后,将该变量置为false,下一次循环随即开始执行.
this.wbCnblog.Focus();
SendKeys.Send( " {Enter} "); // 如果存在弹窗,回车确定,防止程序暂定
// this.Focus();
// SendKeys.Send("{Enter}");
// this.wbCnblog.Document.Focus();
// SendKeys.Send("{Enter}");
temp_proxy = current_proxy;
}
}
关于写日志文件,我想应该就相对来说简单多了,就是简单的写文本文件
/// <summary>
/// 写成功日志文件
/// </summary>
/// <param name="text"></param>
// Create By Charles 2012-11-25 21:31
public void WriteText( string text)
{
FileStream fs = new FileStream(Path.Combine(Application.StartupPath, " succes_log.txt "), FileMode.Append);
StreamWriter sw = new StreamWriter(fs, Encoding.Default);
sw.Write(text);
sw.Close();
fs.Close();
}
差点忘了,还有一个很重要的代码,便是刷新 代理 注册表
#region 读取并设置浏览器的proxy server信息
RegistryKey pregkey;
pregkey = Registry.CurrentUser.OpenSubKey( @" Software\Microsoft\Windows\CurrentVersion\Internet Settings ", true);
if (pregkey == null)
{
this.txt_info.Text = " 键值不存在! ";
}
else
{
pregkey.SetValue( " ProxyServer ", lst.SelectedItems[ 0].SubItems[ 0].Text + " : " + lst.SelectedItems[ 0].SubItems[ 1].Text);
this.txt_info.Text = pregkey.GetValue( " ProxyServer ").ToString();
}
#endregion
知识点差不多就这些了。
#region 自定义方法
bool loading = true; // 该变量表示网页是否正在加载.
string html = string.Empty;
WebBrowser browser = new WebBrowser();
int successcount = 0;
int failurecount = 0;
int bugcount = 0;
string temp_proxy = "";
string current_proxy = ""; // 当前代理,用于些日志用到,相当于排他锁的作用
public void GetHtml( string[] urls, string[] proxyurls_ip, string[] proxyurls_port)
{
wbCnblog.DocumentText = " 页面加载中... ";
wbCnblog.Navigated += new WebBrowserNavigatedEventHandler(browser_Navigated); // 页面加载时执行 browser_Navigated ,获取返回内容,并写成功日志
for ( int i = 0; i < urls.Length; i++)
{
loading = true; // 表示正在加载
NaviByProxy( // 代理访问URL
proxyurls_ip[i], // 选中的代理IP地址
proxyurls_port[i], // 选中的代理IP的端口
urls[i] // url地址
);
while (loading) // 记录状态
{
this.txt_info.Text = " 正通过代理 " + proxyurls_ip[i] + " : " + proxyurls_port[i] + " 进行投票 ";
this.textBox_url.Text = urls[i];
current_proxy = proxyurls_ip[i] + " : " + proxyurls_port[i];
try
{
Application.DoEvents(); // 等待本次加载完毕才执行下次循环.
}
catch
{
bugcount++;
this.txt_result.Text = " 成功 " + successcount + " 个 " + " /失败 " + failurecount + " 个/错误 " + bugcount + " 个 ";
continue;
}
}
}
this.txt_result.Text += " 此轮投票已经结束 ";
}
#endregion
以下代码则是 加载内容:
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
// Create by Charles 2012-11-25 13:23
void browser_Navigated( object sender, WebBrowserNavigatedEventArgs e)
{
if (current_proxy != temp_proxy) // 排他锁的作用
{
html = wbCnblog.DocumentText; // 获取到的html.
this.wbCnblog.DocumentText = "";
if (html.Contains( " 生活快乐 "))
{
// this.txt_result.Text += html;
this.txt_status.Text = " 成功 ";
successcount++;
this.txt_result.Text = " 成功 " + successcount + " 个 " + " /失败 " + failurecount + " 个/错误 " + bugcount + " 个 ";
this.txt_success.Text += current_proxy + " | ";
WriteText(current_proxy + " ----投票成功---- " + DateTime.Now + Environment.NewLine); // 写日志文件
}
else
{
this.txt_status.Text = " 失败 ";
failurecount++;
this.txt_result.Text = " 成功 " + successcount + " 个 " + " /失败 " + failurecount + " 个/错误 " + bugcount + " 个 ";
}
loading = false; // 在加载完成后,将该变量置为false,下一次循环随即开始执行.
this.wbCnblog.Focus();
SendKeys.Send( " {Enter} "); // 如果存在弹窗,回车确定,防止程序暂定
// this.Focus();
// SendKeys.Send("{Enter}");
// this.wbCnblog.Document.Focus();
// SendKeys.Send("{Enter}");
temp_proxy = current_proxy;
}
}
关于写日志文件,我想应该就相对来说简单多了,就是简单的写文本文件
/// <summary>
/// 写成功日志文件
/// </summary>
/// <param name="text"></param>
// Create By Charles 2012-11-25 21:31
public void WriteText( string text)
{
FileStream fs = new FileStream(Path.Combine(Application.StartupPath, " succes_log.txt "), FileMode.Append);
StreamWriter sw = new StreamWriter(fs, Encoding.Default);
sw.Write(text);
sw.Close();
fs.Close();
}
差点忘了,还有一个很重要的代码,便是刷新 代理 注册表
#region 读取并设置浏览器的proxy server信息
RegistryKey pregkey;
pregkey = Registry.CurrentUser.OpenSubKey( @" Software\Microsoft\Windows\CurrentVersion\Internet Settings ", true);
if (pregkey == null)
{
this.txt_info.Text = " 键值不存在! ";
}
else
{
pregkey.SetValue( " ProxyServer ", lst.SelectedItems[ 0].SubItems[ 0].Text + " : " + lst.SelectedItems[ 0].SubItems[ 1].Text);
this.txt_info.Text = pregkey.GetValue( " ProxyServer ").ToString();
}
#endregion