private void button_Ok_Click(object sender, EventArgs e) { GivePriceStep2 givePrice = new GivePriceStep2(); givePrice.price = this.inputBox2Object(this.textBox1);//价格 givePrice.inputBox = this.inputBox2Object(this.textBox2);//输入价格 givePrice.button = this.inputBox2Object(this.textBox3);//出价按钮 SubmitPrice submit = new SubmitPrice(); submit.captcha = new Position[]{ this.inputBox2Object(this.textBox4),//校验码 this.inputBox2Object(this.textBox5)//校验码提示 }; submit.inputBox = this.inputBox2Object(this.textBox6);//输入校验码 string[] posBtnOK = this.textBox7.Text.Split(new char[] { ',' }); submit.buttons = new Position[]{ this.inputBox2Object(this.textBox7),//确定按钮 this.inputBox2Object(this.textBox7, offsetX:186, offsetY:0)//取消按钮 }; this.bid = new BidStep2(); this.bid.give = givePrice; this.bid.submit = submit; this.cancel = false; this.Close(); }
private void onSubmit_Click(object sender, EventArgs e) { Rectangle screen = new Rectangle(); screen = Screen.GetWorkingArea(this); GivePrice givePrice = new GivePrice(); givePrice.price = this.inputBox2Object(this.textBox1);//价格 givePrice.inputBox = this.inputBox2Object(this.textBox2);//输入价格 givePrice.button = this.inputBox2Object(this.textBox3);//出价按钮 SubmitPrice submit = new SubmitPrice(); submit.captcha = new Position[]{ this.inputBox2Object(this.textBox4),//校验码 this.inputBox2Object(this.textBox5)//校验码提示 }; submit.inputBox = this.inputBox2Object(this.textBox6);//输入校验码 string[] posBtnOK = this.textBox7.Text.Split(new char[] { ',' }); submit.buttons = new Position[]{ this.inputBox2Object(this.textBox7),//确定按钮 this.inputBox2Object(this.textBox7, offsetX:186, offsetY:0)//取消按钮 }; this.bid = new Bid(); this.bid.give = givePrice; this.bid.submit = submit; MessageBoxButtons messButton = MessageBoxButtons.OKCancel; DialogResult dr = MessageBox.Show("确定要提交该配置吗?", "提交BID配置", messButton); if (dr == DialogResult.OK) { string hostName = System.Net.Dns.GetHostName(); string endpoint = this.url + "/command/operation/screenconfig/BID/accept.do"; RestClient rest = new RestClient(endpoint: endpoint, method: HttpVerb.POST, postObj: this.bid); String response = rest.MakeRequest("?fromHost=" + String.Format("host:{0}, screen:{1}*{2}", hostName, screen.Width, screen.Height)); } }
private void subimt(String URL, SubmitPrice points, CaptchaInput inputType) { logger.WarnFormat("BEGIN 验证码({0})", inputType); ScreenUtil.SetCursorPos(points.inputBox.x, points.inputBox.y); ScreenUtil.mouse_event((int)(MouseEventFlags.Absolute | MouseEventFlags.LeftDown | MouseEventFlags.LeftUp), 0, 0, 0, IntPtr.Zero); logger.Info("\tBEGIN make INPUTBOX blank"); System.Threading.Thread.Sleep(25); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0, 0); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0x2, 0); System.Threading.Thread.Sleep(25); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0, 0); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0x2, 0); System.Threading.Thread.Sleep(25); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0, 0); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0x2, 0); System.Threading.Thread.Sleep(25); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0, 0); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0x2, 0); System.Threading.Thread.Sleep(25); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0, 0); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0x2, 0); System.Threading.Thread.Sleep(25); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0, 0); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0x2, 0); System.Threading.Thread.Sleep(25); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0, 0); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0x2, 0); System.Threading.Thread.Sleep(25); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0, 0); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0x2, 0); System.Threading.Thread.Sleep(25); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0, 0); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0x2, 0); System.Threading.Thread.Sleep(25); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0, 0); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0x2, 0); logger.Info("\tEND make INPUTBOX blank"); byte[] content = new ScreenUtil().screenCaptureAsByte(points.captcha[0].x, points.captcha[0].y, 128, 28); byte[] binaryTips = new ScreenUtil().screenCaptureAsByte(points.captcha[1].x, points.captcha[1].y, 112, 16); Bitmap bitmap = new Bitmap(new MemoryStream(content)); this.pictureBox1.Image = bitmap; String strLoading = this.m_orcCaptchaLoading.IdentifyStringFromPic(bitmap); logger.InfoFormat("LOADING : {0}", strLoading); //if ("正在获取校验码".Equals(strLoading)) { // logger.InfoFormat("正在获取校验码,关闭&打开窗口重新获取"); // ScreenUtil.SetCursorPos(points.buttons[0].x + 188, points.buttons[0].y);//取消按钮 // ScreenUtil.mouse_event((int)(MouseEventFlags.Absolute | MouseEventFlags.LeftDown | MouseEventFlags.LeftUp), 0, 0, 0, IntPtr.Zero); // return; //} logger.Info("\tBEGIN identify Captcha"); String txtCaptcha = this.m_orcCaptcha.IdentifyStringFromPic(bitmap); logger.InfoFormat("\tEND identify Captcha : [{0}]", txtCaptcha); logger.Info("\tBEGIN input ACTIVE CAPTCHA"); String strActive = ""; if (CaptchaInput.LEFT == inputType) strActive = txtCaptcha.Substring(0, 4); else if (CaptchaInput.MIDDLE == inputType) strActive = txtCaptcha.Substring(1, 4); else if (CaptchaInput.RIGHT == inputType) strActive = txtCaptcha.Substring(2, 4); else if (CaptchaInput.AUTO == inputType) strActive = this.m_orcCaptchaTipsUtil.getActive(txtCaptcha, new Bitmap(new MemoryStream(binaryTips))); for (int i = 0; i < strActive.Length; i++) { ScreenUtil.keybd_event(ScreenUtil.keycode[strActive[i].ToString()], 0, 0, 0); ScreenUtil.keybd_event(ScreenUtil.keycode[strActive[i].ToString()], 0, 0x2, 0); System.Threading.Thread.Sleep(25); } logger.InfoFormat("\tEND input ACTIVE CAPTCHA [{0}]", strActive); { MessageBoxButtons messButton = MessageBoxButtons.OKCancel; DialogResult dr = MessageBox.Show("确定要提交出价吗?", "提交出价", messButton, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly); if (dr == DialogResult.OK) { logger.Info("用户选择确定出价"); ScreenUtil.SetCursorPos(points.buttons[0].x, points.buttons[0].y);//确定按钮 ScreenUtil.mouse_event((int)(MouseEventFlags.Absolute | MouseEventFlags.LeftDown | MouseEventFlags.LeftUp), 0, 0, 0, IntPtr.Zero); System.Threading.Thread.Sleep(1000); ScreenUtil.SetCursorPos(points.buttons[0].x + 188 / 2, points.buttons[0].y - 10);//确定按钮 //ScreenUtil.mouse_event((int)(MouseEventFlags.Absolute | MouseEventFlags.LeftDown | MouseEventFlags.LeftUp), 0, 0, 0, IntPtr.Zero); } else { logger.Warn("用户选择取消出价"); ScreenUtil.SetCursorPos(points.buttons[0].x + 188, points.buttons[0].y);//取消按钮 ScreenUtil.mouse_event((int)(MouseEventFlags.Absolute | MouseEventFlags.LeftDown | MouseEventFlags.LeftUp), 0, 0, 0, IntPtr.Zero); } } logger.Info("END 验证码"); }
private Boolean submit(String URL, SubmitPrice submitPoints) { logger.Info("BEGIN giveCAPTCHA"); logger.Info("\tBEGIN make INPUT blank"); ScreenUtil.SetCursorPos(submitPoints.inputBox.x, submitPoints.inputBox.y); ScreenUtil.mouse_event((int)(MouseEventFlags.Absolute | MouseEventFlags.LeftDown | MouseEventFlags.LeftUp), 0, 0, 0, IntPtr.Zero); System.Threading.Thread.Sleep(50); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0, 0); System.Threading.Thread.Sleep(50); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0, 0); System.Threading.Thread.Sleep(50); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0, 0); System.Threading.Thread.Sleep(50); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0, 0); System.Threading.Thread.Sleep(50); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0, 0); System.Threading.Thread.Sleep(50); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0, 0); System.Threading.Thread.Sleep(50); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0, 0); System.Threading.Thread.Sleep(50); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0, 0); System.Threading.Thread.Sleep(50); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0, 0); System.Threading.Thread.Sleep(50); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0, 0); logger.Info("\tEND make INPUT blank"); logger.Info("\tBEGIN identify CAPTCHA..."); byte[] binaryCaptcha = null; Boolean isLoading = true; int retry = 0; while (isLoading) { logger.InfoFormat("\t try LOADING = {0}", retry++); binaryCaptcha = new ScreenUtil().screenCaptureAsByte(submitPoints.captcha[0].x, submitPoints.captcha[0].y, 128, 28); String strLoading = this.m_orcLoading.getCharFromPic(new Bitmap(new MemoryStream(binaryCaptcha))); logger.InfoFormat("\t LOADING = {0}", strLoading); if ("正在获取校验码".Equals(strLoading)) { if (retry > 2) {//重试0,1,2,3都在获取校验码 logger.InfoFormat("Abort,close & re-open"); ScreenUtil.SetCursorPos(submitPoints.buttons[0].x+188, submitPoints.buttons[0].y);//取消按钮 ScreenUtil.mouse_event((int)(MouseEventFlags.Absolute | MouseEventFlags.LeftDown | MouseEventFlags.LeftUp), 0, 0, 0, IntPtr.Zero); return false;//放弃本次出价 } Thread.Sleep(250); } else isLoading = false; } logger.Info("\t\tBEGIN post CAPTACH"); String txtCaptcha = new HttpUtil().postByteAsFile(URL + "/receive/captcha.do", binaryCaptcha); logger.Info("\t\tEND post CAPTACH"); byte[] binaryTips = new ScreenUtil().screenCaptureAsByte(submitPoints.captcha[1].x, submitPoints.captcha[1].y, 112, 16); String strActive = this.m_captchaUtil.getActive(txtCaptcha, new Bitmap(new System.IO.MemoryStream(binaryTips))); logger.InfoFormat("\tEND identified CAPTCHA = {0}, ACTIVE = {1}", txtCaptcha, strActive); logger.Info("\tBEGIN input CAPTCHA"); { for (int i = 0; i < strActive.Length; i++) { ScreenUtil.keybd_event(ScreenUtil.keycode[strActive[i].ToString()], 0, 0, 0); System.Threading.Thread.Sleep(50); } } logger.Info("\tEND input CAPTCHA"); logger.Info("\tBEGIN click BUTTON[确定]"); ScreenUtil.SetCursorPos(submitPoints.buttons[0].x, submitPoints.buttons[0].y); ScreenUtil.mouse_event((int)(MouseEventFlags.Absolute | MouseEventFlags.LeftDown | MouseEventFlags.LeftUp), 0, 0, 0, IntPtr.Zero); logger.Info("\tEND click BUTTON[确定]"); ScreenUtil.SetCursorPos(submitPoints.buttons[0].x + 188 / 2, submitPoints.buttons[0].y - 10);//确定按钮 //System.Threading.Thread.Sleep(3000); //if (points.Length > 2) //{ // System.Threading.Thread.Sleep(50); // ScreenUtil.SetCursorPos(points[2].X, points[2].Y); // ScreenUtil.mouse_event((int)(MouseEventFlags.Absolute | MouseEventFlags.LeftDown | MouseEventFlags.LeftUp), 0, 0, 0, IntPtr.Zero); // if (points.Length > 3) // { // System.Threading.Thread.Sleep(50); // ScreenUtil.SetCursorPos(points[3].X, points[3].Y); //ScreenUtil.mouse_event((int)(MouseEventFlags.Absolute | MouseEventFlags.LeftDown | MouseEventFlags.LeftUp), 0, 0, 0, IntPtr.Zero); // } //} logger.Info("END giveCAPTCHA"); return true; }
private void subimt(String URL, SubmitPrice points, int type) { logger.Info("BEGIN 验证码"); ScreenUtil.SetCursorPos(points.inputBox.x, points.inputBox.y); ScreenUtil.mouse_event((int)(MouseEventFlags.Absolute | MouseEventFlags.LeftDown | MouseEventFlags.LeftUp), 0, 0, 0, IntPtr.Zero); //ScreenUtil.mouse_event((int)(MouseEventFlags.Absolute | MouseEventFlags.LeftDown | MouseEventFlags.LeftUp), 0, 0, 0, IntPtr.Zero); logger.Info("\tBEGIN make INPUTBOX blank"); System.Threading.Thread.Sleep(50); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0, 0); System.Threading.Thread.Sleep(50); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0, 0); System.Threading.Thread.Sleep(50); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0, 0); System.Threading.Thread.Sleep(50); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0, 0); System.Threading.Thread.Sleep(50); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0, 0); System.Threading.Thread.Sleep(50); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0, 0); System.Threading.Thread.Sleep(50); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0, 0); System.Threading.Thread.Sleep(50); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0, 0); System.Threading.Thread.Sleep(50); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0, 0); System.Threading.Thread.Sleep(50); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0, 0); logger.Info("\tEND make INPUTBOX blank"); byte[] content = new ScreenUtil().screenCaptureAsByte(points.captcha[0].x, points.captcha[0].y, 128, 28); this.pictureBox1.Image = Bitmap.FromStream(new System.IO.MemoryStream(content)); String strLoading = this.m_orcCaptchaLoading.getCharFromPic(new Bitmap(new MemoryStream(content))); logger.InfoFormat("LOADING : {0}", strLoading); if ("正在获取校验码".Equals(strLoading)) { logger.InfoFormat("正在获取校验码,关闭&打开窗口重新获取"); ScreenUtil.SetCursorPos(points.buttons[0].x+188, points.buttons[0].y);//取消按钮 ScreenUtil.mouse_event((int)(MouseEventFlags.Absolute | MouseEventFlags.LeftDown | MouseEventFlags.LeftUp), 0, 0, 0, IntPtr.Zero); return; } //byte[] content = null; //Boolean isLoading = true; //int retry = 0; //while (isLoading) //{ // content = new ScreenUtil().screenCaptureAsByte(points.captcha[0].x, points.captcha[0].y, 128, 28); // String strLoading = this.m_orcCaptchaLoading.getCharFromPic(new Bitmap(new MemoryStream(content))); // logger.InfoFormat("\t try to LOADING = {0}", strLoading); // if ("正在获取校验码".Equals(strLoading)) // { // if (retry > 3)//4次都在获取 // return;//放弃本次出价 // logger.InfoFormat("\t re-try {0}", ++retry); // System.Threading.Thread.Sleep(250); // } // else // isLoading = false; //} logger.Info("\tBEGIN postCaptcha"); String txtCaptcha = new HttpUtil().postByteAsFile(URL + "/receive/dynamic/captcha.do", content); logger.Info("\tEND postCaptcha"); logger.Info("\tBEGIN input ACTIVE CAPTCHA [" + type + "]"); if (type == 0) { for (int i = 0; i < 4; i++) { ScreenUtil.keybd_event(ScreenUtil.keycode[txtCaptcha[i].ToString()], 0, 0, 0); System.Threading.Thread.Sleep(50); } } else if (type == 1) { for (int i = 1; i < 5; i++) { ScreenUtil.keybd_event(ScreenUtil.keycode[txtCaptcha[i].ToString()], 0, 0, 0); System.Threading.Thread.Sleep(50); } } else if (type == 2) { for (int i = 2; i < 6; i++) { ScreenUtil.keybd_event(ScreenUtil.keycode[txtCaptcha[i].ToString()], 0, 0, 0); System.Threading.Thread.Sleep(50); } } logger.Info("\tEND input ACTIVE CAPTCHA"); { System.Threading.Thread.Sleep(50); MessageBoxButtons messButton = MessageBoxButtons.OKCancel; DialogResult dr = MessageBox.Show("确定要提交出价吗?", "提交出价", messButton, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly); if (dr == DialogResult.OK) { logger.InfoFormat("用户选择确定出价"); ScreenUtil.SetCursorPos(points.buttons[0].x, points.buttons[0].y);//确定按钮 ScreenUtil.mouse_event((int)(MouseEventFlags.Absolute | MouseEventFlags.LeftDown | MouseEventFlags.LeftUp), 0, 0, 0, IntPtr.Zero); System.Threading.Thread.Sleep(1000); ScreenUtil.SetCursorPos(points.buttons[0].x + 188 / 2, points.buttons[0].y - 10);//确定按钮 //ScreenUtil.mouse_event((int)(MouseEventFlags.Absolute | MouseEventFlags.LeftDown | MouseEventFlags.LeftUp), 0, 0, 0, IntPtr.Zero); } else { logger.InfoFormat("用户选择取消出价"); ScreenUtil.SetCursorPos(points.buttons[0].x + 188, points.buttons[0].y);//取消按钮 ScreenUtil.mouse_event((int)(MouseEventFlags.Absolute | MouseEventFlags.LeftDown | MouseEventFlags.LeftUp), 0, 0, 0, IntPtr.Zero); } //if (points.Length > 3) //{ // System.Threading.Thread.Sleep(50); // ScreenUtil.SetCursorPos(points[3].X, points[3].Y); //ScreenUtil.mouse_event((int)(MouseEventFlags.Absolute | MouseEventFlags.LeftDown | MouseEventFlags.LeftUp), 0, 0, 0, IntPtr.Zero); //} } logger.Info("END 验证码"); }
private Boolean submit(String URL, SubmitPrice submitPoints) { logger.Info("BEGIN giveCAPTCHA"); logger.Info("\tBEGIN make INPUT blank"); logger.DebugFormat("INPUT BOX({0}, {1})", submitPoints.inputBox.x, submitPoints.inputBox.y); ScreenUtil.SetCursorPos(submitPoints.inputBox.x, submitPoints.inputBox.y); ScreenUtil.mouse_event((int)(MouseEventFlags.Absolute | MouseEventFlags.LeftDown | MouseEventFlags.LeftUp), 0, 0, 0, IntPtr.Zero); System.Threading.Thread.Sleep(25); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0, 0); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0x2, 0); System.Threading.Thread.Sleep(25); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0, 0); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0x2, 0); System.Threading.Thread.Sleep(25); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0, 0); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0x2, 0); //System.Threading.Thread.Sleep(25); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0, 0); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0x2, 0); //System.Threading.Thread.Sleep(25); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0, 0); ScreenUtil.keybd_event(ScreenUtil.keycode["BACKSPACE"], 0, 0x2, 0); System.Threading.Thread.Sleep(25); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0, 0); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0x2, 0); System.Threading.Thread.Sleep(25); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0, 0); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0x2, 0); System.Threading.Thread.Sleep(25); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0, 0); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0x2, 0); //System.Threading.Thread.Sleep(25); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0, 0); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0x2, 0); //System.Threading.Thread.Sleep(25); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0, 0); ScreenUtil.keybd_event(ScreenUtil.keycode["DELETE"], 0, 0x2, 0); logger.Info("\tEND make INPUT blank"); logger.Info("\tBEGIN identify CAPTCHA..."); byte[] binaryCaptcha = null; Boolean isLoading = true; int retry = 0; Thread.Sleep(1000);//等待1秒钟(等待验证码或者“正在获取验证码”字样出来 logger.DebugFormat("CAPTURE CAPTCHA({0}, {1})", submitPoints.captcha[0].x, submitPoints.captcha[0].y); while (isLoading)//重试3.5秒钟 { binaryCaptcha = new ScreenUtil().screenCaptureAsByte(submitPoints.captcha[0].x, submitPoints.captcha[0].y, 128, 28); File.WriteAllBytes(String.Format("AUTO-LOADING-{0}.BMP", retry), binaryCaptcha); String strLoading = this.m_orcLoading.IdentifyStringFromPic(new Bitmap(new MemoryStream(binaryCaptcha))); logger.InfoFormat("\t LOADING({0}) = {1}", retry++, strLoading); if ("正在获取校验码".Equals(strLoading)) { if (retry > 14) { //重试1,2,3,4 ->1秒 //重试5,6,7,8 ->2秒 //重试9,10,11,12 ->3秒 //重试13,14 ->0.5秒 //都在获取校验码 logger.InfoFormat("Loading captcha timeout. 放弃 close & re-open"); ScreenUtil.SetCursorPos(submitPoints.buttons[0].x + 188, submitPoints.buttons[0].y);//取消按钮 ScreenUtil.mouse_event((int)(MouseEventFlags.Absolute | MouseEventFlags.LeftDown | MouseEventFlags.LeftUp), 0, 0, 0, IntPtr.Zero); return false;//放弃本次出价 } Thread.Sleep(250); } else isLoading = false; } File.WriteAllBytes("AUTO-CAPTCHA.BMP", binaryCaptcha); String txtCaptcha = this.m_orcCaptcha.IdentifyStringFromPic(new Bitmap(new System.IO.MemoryStream(binaryCaptcha))); logger.DebugFormat("CAPTURE TIPS({0}, {1})", submitPoints.captcha[1].x, submitPoints.captcha[1].y); byte[] binaryTips = new ScreenUtil().screenCaptureAsByte(submitPoints.captcha[1].x, submitPoints.captcha[1].y, 112, 16); File.WriteAllBytes("AUTO-TIPS.BMP", binaryCaptcha); String strActive = this.m_captchaUtil.getActive(txtCaptcha, new Bitmap(new System.IO.MemoryStream(binaryTips))); logger.InfoFormat("\tEND identify CAPTCHA = {0}, ACTIVE = {1}", txtCaptcha, strActive); logger.Info("\tBEGIN input CAPTCHA"); { for (int i = 0; i < strActive.Length; i++) { ScreenUtil.keybd_event(ScreenUtil.keycode[strActive[i].ToString()], 0, 0, 0); ScreenUtil.keybd_event(ScreenUtil.keycode[strActive[i].ToString()], 0, 0x2, 0); System.Threading.Thread.Sleep(50); } } logger.Info("\tEND input CAPTCHA"); logger.Info("\tBEGIN click BUTTON[确定]"); logger.DebugFormat("BUTTON[确定]({0}, {1})", submitPoints.buttons[0].x, submitPoints.buttons[0].y); ScreenUtil.SetCursorPos(submitPoints.buttons[0].x, submitPoints.buttons[0].y); ScreenUtil.mouse_event((int)(MouseEventFlags.Absolute | MouseEventFlags.LeftDown | MouseEventFlags.LeftUp), 0, 0, 0, IntPtr.Zero); logger.Info("\tEND click BUTTON[确定]"); ScreenUtil.SetCursorPos(submitPoints.buttons[0].x + 188 / 2, submitPoints.buttons[0].y - 10);//确定按钮 logger.Info("END giveCAPTCHA"); return true; }