/// <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); }
/// <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; }