private CaptchaAnswerImage CaptureCaptchaImage() { DateTime dt = DateTime.Now; var uuid = KK.uuid(); // 1. 验证码 - 提示语 CoordRectangle rect1 = CoordRectangle.From(actionManager.AddDelta(442, 338), 380, 53); var img01Path = string.Format("{0}\\{1}-{2:HHmmss}-p21.jpg", KK.CapturesDir(), uuid, dt); actionManager.CaptureImage(rect1, img01Path); // 2. 验证码 - 图形区域 CoordRectangle rect2 = CoordRectangle.From(actionManager.AddDelta(445, 390), 230, 90); var img02Path = string.Format("{0}\\{1}-{2:HHmmss}-p22.jpg", KK.CapturesDir(), uuid, dt); actionManager.CaptureImage(rect2, img02Path); CaptchaAnswerImage img = new CaptchaAnswerImage(); img.Uuid = uuid; img.CaptureTime = dt; img.ImagePath1 = img01Path; img.ImagePath2 = img02Path; return(img); }
public void PreviewPhase2Captcha(PagePrice pp) { // TODO: 这里使用异步处理,否则出现不能显示验证码。 // TODO: 这里可以归为一类问题:模拟时,必须等到所有操作才能显示页面。需要解决。 logger.InfoFormat("Execute PreviewPhase2Captcha @{0}", pp.pageTime); phase2Manager.OfferPrice(pp.basePrice + 1500, false, (img) => { biddingContext.PutAwaitImage(img, null); Phase2PreviewCaptcha = img; phase2Manager.CancelOfferedPrice(); return(true); }); // CaptchaAnswerImage img = null; //ThreadUtils.StartNewTaskSafe(() => //{ // img = phase2Manager.OfferPrice(pp.basePrice + 1500, false); // //}); IsPreviewDone = true; //return img; }
/// <summary> /// 出价 - /// 1. 输入价格 - 移动到输入框位置,点击,清空历史数据,输入新价格 /// 2. 点击出价按钮 - 移动到按钮位置,点击 /// 3. 对验证码区域截图 且 上传 /// </summary> public void OfferPrice(int targetPrice, bool enableCancelFirst, Func <CaptchaAnswerImage, bool> callbackFunc = null) { // 0. 出价前,先尝试取消,防止上一步的可能的遮罩 if (enableCancelFirst) { // this.CancelOfferedPrice(); actionManager.ClickButtonByFenceWayRToL(actionManager.AddDelta(742, 502)); } // 1. 输入价格 且 出价 // TODO: 坐标方法 - 应该抽取出来单独管理 actionManager.InputTextAtPoint(actionManager.AddDelta(676, 417), targetPrice.ToString(), true, "第二阶段出价"); actionManager.ClickButtonAtPoint(actionManager.AddDelta(800, 415), true, "第二阶段出价"); // 2. 对验证码区域截屏且上传 // 这里尝试异步 ThreadUtils.StartNewTaskSafe(() => { // 这里等待会阻塞进程 KK.Sleep(390); CaptchaAnswerImage img = CaptureCaptchaImage(); UploadCaptchaImage(img); callbackFunc?.Invoke(img); } ); // return img; }
private CaptchaAnswerImage CaptureCaptchaImage() { DateTime dt = DateTime.Now; var uuid = KK.uuid(); // 1. 验证码 - 提示语 CoordRectangle rect1 = CoordRectangle.From(actionManager.AddDelta(442, 338), 380, 53); var img01Path = KK.CapturesDir() + "\\" + uuid + "-" + dt.ToString("HHmmss") + "-p21.jpg"; actionManager.CaptureImage(rect1, img01Path); // 2. 验证码 - 图形区域 CoordRectangle rect2 = CoordRectangle.From(actionManager.AddDelta(445, 390), 230, 90); var img02Path = KK.CapturesDir() + "\\" + uuid + "-" + dt.ToString("HHmmss") + "-p22.jpg"; actionManager.CaptureImage(rect2, img02Path); CaptchaAnswerImage img = new CaptchaAnswerImage(); img.Uuid = uuid; img.CaptureTime = dt; img.ImagePath1 = img01Path; img.ImagePath2 = img02Path; return(img); }
public void FirstOfferPrice(int price) { logger.InfoFormat("第一阶段出价 - 开始"); CaptchaAnswerImage img = phase1Manager.OfferPrice(price, true, true); StartAwaitAnswerToSubmit(img.Uuid); logger.InfoFormat("第一阶段出价 - 等待验证码提交"); }
public bool CaptchaAnswerInputCallback(CaptchaAnswerImage img) { // biddingPriceManager.InputAnswer(img.Uuid); var req = biddingPriceManager.GetRequestByUuid(img.Uuid); if (req != null && req.OperateStatus == StrategyOperateStatus.CAPTCHA_AWAIT) { phase2Manager.InputCaptchForSubmit(img.Answer); req.OperateStatus = StrategyOperateStatus.CAPTCHA_INPUTTED; logger.InfoFormat("strategy#{0} captcha-answer is inputted", req.StrategySecond); } return(true); }
private void UploadCaptchaImage(CaptchaAnswerImage img) { string url = conf.UploadCaptchaTaskUrl; CaptchaImageUploadRequest req = new CaptchaImageUploadRequest(); req.token = "devJustTest"; req.uid = img.Uuid; req.timestamp = KK.CurrentMills(); req.from = "test"; int httpStatus; DataResult <CaptchaImageUploadResponse> dr = HttpClients .PostWithFiles <DataResult <CaptchaImageUploadResponse> >(url, req, new List <string> { img.ImagePath1, img.ImagePath2 }, out httpStatus); logger.InfoFormat("upload catpcha task#{0}, result is {1}", img.Uuid, Jsons.ToJson(dr)); }
/// <summary> /// 出价 - /// 1. 输入价格 - 移动到输入框位置,点击,清空历史数据,输入新价格 /// 2. 点击出价按钮 - 移动到按钮位置,点击 /// 3. 对验证码区域截图 且 上传 /// </summary> public CaptchaAnswerImage OfferPrice(int targetPrice, bool enableCancelFirst, bool needUploadCaptchaTask = false) { // 0. 出价前,先尝试取消,防止上一步的可能的遮罩 if (enableCancelFirst) { actionManager.ClickButtonByFenceWayRToL(actionManager.AddDelta(742, 502)); } // 1. 输入价格 且 出价 actionManager.InputTextAtPoint(actionManager.AddDelta(676, 317), targetPrice.ToString(), true, "第一阶段出价#i1"); actionManager.InputTextAtPoint(actionManager.AddDelta(676, 375), targetPrice.ToString(), true, "第一阶段出价#i2"); actionManager.ClickButtonAtPoint(actionManager.AddDelta(800, 373), true, "第一阶段出价"); // 2. 对验证码区域截屏且上传 KK.Sleep(500); CaptchaAnswerImage img = CaptureCaptchaImage(); UploadCaptchaImage(img); return(img); }