Пример #1
0
        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);
        }
Пример #2
0
        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;
        }
Пример #3
0
        /// <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;
        }
Пример #4
0
        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);
        }
Пример #5
0
        public void FirstOfferPrice(int price)
        {
            logger.InfoFormat("第一阶段出价 - 开始");

            CaptchaAnswerImage img = phase1Manager.OfferPrice(price, true, true);

            StartAwaitAnswerToSubmit(img.Uuid);

            logger.InfoFormat("第一阶段出价 - 等待验证码提交");
        }
Пример #6
0
        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);
        }
Пример #7
0
        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));
        }
Пример #8
0
        /// <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);
        }