和@陈宇翔的修行录忙了一个星期写了个刷票器来交软件测试课的作业
PPT不是很好传,放到资源里面去,PPT地址:
源码地址:http://download.csdn.net/detail/a8887396/5344103
投票效果:
刷票地址: (有效期半年)
http://mwangbobo.jingdianet.com/Default.aspx
主要代码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using mshtml; using System.Net; using System.Runtime.InteropServices; namespace 刷票 { public partial class Form1 : Form { [DllImport(@"wininet", SetLastError = true, CharSet = CharSet.Auto, EntryPoint = "InternetSetOption", CallingConvention = CallingConvention.StdCall)] //即时刷新IE设置 public static extern bool InternetSetOption( int hInternet, int dmOption, IntPtr lpBuffer, int dwBufferLength ); //是否可以连接到internet [DllImport("wininet.dll")] public extern static bool InternetGetConnectedState(out int Description, int ReservedValue); //返回false就是能连接到internet public static bool IsConnectedToInternet() { int Desc; return InternetGetConnectedState(out Desc, 0); } int count_all = 0; //投票次数 bool is_start = false; //开始标志 bool is_interval = false; //是否使用时间间隔 bool is_proxy = false; // bool is_ip_changed = false; string url_str = "http://mwangbobo.jingdianet.com/Default.aspx"; //投票的指定网址 // string url_str = "http://localhost:4128/WebSite1/Default.aspx"; string file_path; //代理IP的文本路径 string[] ip = new string[1024]; //代理IP // string[] port = new string[1024]; //代理IP的端口 int count_ip = 0; //代理IP个数 public Form1() { InitializeComponent(); webBrowser1.Navigate(url_str); //跳转到页面 } /* ================== 投票模块 ================== */ //点击开始按钮 private void btn_start_Click(object sender, EventArgs e) { if (!IsConnectedToInternet()) //检查网卡状态 是否连接到internet 如你把网线拔了就会出错, 不包括设置代理IP错误导致不能开网页的情况 { MessageBox.Show("不能连接到internet"); return; } // if (is_start || webBrowser1.Url == null || webBrowser1.Url.ToString() != url_str) //开始之后不能再点开始无效 或者 当前页面不是投票页面无效 { // return; } is_start = true; int interval = 0; bool i = int.TryParse(text_interval.Text, out interval);//获取刷新间隔 if (!i || interval == 0) { //获取间隔失败 或者间隔为0 不使用计时器 is_interval = false; complete_timer.Interval = 3000; //网页加载计时器 防止网页出现无法载入的情况。 } else { vote_timer.Interval = interval * 1000; //因为是微秒 is_interval = true; complete_timer.Interval = interval * 1000 + 3000; //网页加载计时器 } if (check_ip.Checked) { is_proxy = true; } if (int.TryParse(text_count.Text.ToString(), out count_all)) //如果输入的是有效数字 { if (count_all > 0) //刷票次数大于0 { if (is_proxy) count_all++; //第一次投票不管是不是代理IP都不使用代理IP 所以加一次 text_remain.Text = Convert.ToString(count_all); // complete_timer.Enabled = true;//开始加载完成计时 if (is_interval) { vote_timer.Enabled = true; //启动计时器 } else { vote(); //不使用计时器时 直接投票 } } } else { is_start = false; is_interval = false; is_proxy = false; vote_timer.Enabled = false; vote_timer.Enabled = false; } } //计时器事件 进行投票 private void vote_timer_Tick(object sender, EventArgs e) { if (!is_start || count_all == 0) return; vote_timer.Enabled = false; vote(); } //姓名 号码 string[] xing = { "赵"," 钱", "孙", "李", "周", "吴", "郑", "王","冯", "陈", "楮", "卫", "蒋", "沈", "韩", "杨", "朱", "秦", "尤", "许", "何", "吕", "施", "张","孔", "曹", "严", "华", "金", "魏", "陶", "姜", "戚", "谢", "邹", "喻", "柏", "水", "窦", "章","云", "苏", "潘", "葛", "奚", "范", "彭", "郎"}; string[] ming = { "昌睿", "泉龙", "建利", "泰福", "长财", "红良", "昌逊", "卓臻", "昌哲", "承哲", "卓逊", "武隆", "冰姿", "斌", "书琪", "季方", "元峰", "美茹", "雪莉", "娜芮", "茜茹", "沛秀", "敬瑶", "依洁", "巧梅", "卿青", "政光", "思远", "卿清", "志昆", "锡俊", "婉柔", "文雅", "俊刚", "祝赢", "蕾", "禧", "齐", "兮" }; string[] haomaf = { "138", "139", "150" }; //投票: 选checkbox 填表格 点提交 private void vote() { //如果已经刷票次数用完了 初始化这些值 然后停止 if (count_all <= 0) { //is_start = false; return; } text_remain.Text = Convert.ToString(--count_all); //剩余次数-1 并显示到剩余次数文本上 if (is_proxy && count_all > 0) { setProxy(ip[count_all -1]); } Random r = new Random(); string q = xing[r.Next(48)]; //随机选择的姓氏 string k = ming[r.Next(39)]; //随机选择的名字 Application.DoEvents(); string haoma = haomaf[r.Next(3)];//随机生成号码头三位 for (int i = 0; i < 8; i++) //号码后8位生成 { haoma += r.Next(10); } complete_timer.Enabled = true; //开始网页加载计时 try { //下面的代码有一定几率抛出异常 即在网页加载不到所需要的元素的时候. // 异常时 直接结束 但在上面网页加载计时已经开始 //选择第二个选项 动作click webBrowser1.Document.GetElementById("MainContent_RadioButtonList1_2").InvokeMember("click"); // Application.DoEvents(); //填表 随机的名字 webBrowser1.Document.GetElementById("MainContent_UserName").InnerText = q + k; // Application.DoEvents(); //填表 随机的号码 webBrowser1.Document.GetElementById("MainContent_UserPhone").InnerText = haoma; // Application.DoEvents(); //选择提交按钮 动作click webBrowser1.Document.GetElementById("MainContent_OKButton").InvokeMember("click"); Application.DoEvents(); } catch (System.Exception ex) { // is_start = false; //MessageBox.Show("页面中未找到投票对象","错误"); } } //网页加载成功阶段 webBrowser1_DocumentCompleted 此时判断是否处于刷票中,是则再投一次。 private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { complete_timer.Enabled = false; //kai if (!is_start) return; if (count_all > 0) //继续投票 { if (is_interval) { //如果使用间隔计时器 那开始间隔计时 vote_timer.Enabled = true; } else { //没有使用间隔计时器 直接开始投票 vote(); } } else //投完票了, { is_start = false; //投票标志清0 is_interval = false; if (is_proxy) { disProxy(); is_proxy = false; } vote_timer.Enabled = false; //不管有没有计时器 计时器标志清0 complete_timer.Enabled = false; MessageBox.Show("投票完成"); } } //WebBrowser Navigated阶段 : 控制项已巡览至新文件且已开始载入新文件时 另外还有Navigating 表示寻觅开始前 private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e) { IHTMLWindow2 win = (IHTMLWindow2)webBrowser1.Document.Window.DomWindow; string s = @"function confirm() {"; s += @"return true;"; s += @"}"; s += @"function alert() {}"; win.execScript(s, "javascript"); } //结束按钮 private void btn_end_Click(object sender, EventArgs e) { is_start = false; is_interval = false; is_proxy = false; disProxy(); vote_timer.Enabled = false; MessageBox.Show("投票终止"); } /* ================ 代理IP模块 ==================== 1 导入代理IP * 2 使用代理IP */ //导入代理IP的按钮 文本格式必须是IP:PORT才可以正确读取 private void btn_ip_Click(object sender, EventArgs e) { OpenFileDialog fileDialog1 = new OpenFileDialog(); //文件选择框 fileDialog1.InitialDirectory = "d://"; // 默认打开的路径,可更改 fileDialog1.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*"; fileDialog1.FilterIndex = 1; fileDialog1.RestoreDirectory = true; if (fileDialog1.ShowDialog() == DialogResult.OK)//点击OK选择文件 { file_path = fileDialog1.FileName; } else { // file_path = null; return; } // 打开文件 获取IP与端口 if (file_path.Length != 0) { FileStream fs = new FileStream(file_path, FileMode.Open); //打开文件 StreamReader m_streamReader = new StreamReader(fs); //读取文件 m_streamReader.BaseStream.Seek(0, SeekOrigin.Begin); //定位文件读取位置 string strLine = m_streamReader.ReadLine(); //读取第一行 int i = 0; do { ip[i] = strLine.Split('@')[0]; // textBox1.Text += ip[i]; strLine = m_streamReader.ReadLine();//读取下一行 i++; } while (strLine != null && strLine != ""); m_streamReader.Close(); //关闭读取器 m_streamReader.Dispose(); //释放资源 fs.Close(); //关闭文件流 fs.Dispose();//释放资源 count_ip = i; //记录代理IP个数 } } //点击代理IP的checkbox ,如果是使用代理IP,则将代理IP个数写到 刷票次数中 private void check_ip_CheckedChanged(object sender, EventArgs e) { if (check_ip.Checked == true) { text_count.Text = Convert.ToString(count_ip); text_count.Enabled = false; } else { text_count.Enabled = true; } } //设置代理IP private void setProxy(string ip) { if (ip == null || ip == "") return; //如果ip是空的 返回 try { //获取注册表对象 Microsoft.Win32.RegistryKey rk = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings", true); //设置代理可用 rk.SetValue("ProxyEnable", 1); //设置代理IP和端口 rk.SetValue("ProxyServer", ip); rk.Flush(); rk.Close(); //使立即生效 InternetSetOption(0, 39, IntPtr.Zero, 0); InternetSetOption(0, 37, IntPtr.Zero, 0); // InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, NULL); // InternetSetOption(NULL, INTERNET_OPTION_REFRESH, NULL, NULL); // is_ip_changed = true; //webBrowser1.Refresh(); // webBrowser1.Document.ExecCommand("Refresh", false, null); } catch (System.Exception ex) { } } private void disProxy() { try { Microsoft.Win32.RegistryKey rk = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings", true); //设置代理可用 rk.SetValue("ProxyEnable", 0); //设置代理IP和端口 rk.SetValue("ProxyServer", ""); rk.Flush(); rk.Close(); // is_ip_changed = false; //使立即生效 InternetSetOption(0, 39, IntPtr.Zero, 0); InternetSetOption(0, 37, IntPtr.Zero, 0); } catch (System.Exception ex) { } } private void complete_timer_Tick(object sender, EventArgs e) { //count_all--; complete_timer.Enabled = false; disProxy(); webBrowser1.Navigate(url_str); //webBrowser1_DocumentCompleted(null, null); //MessageBox.Show("加载超时"); } } }