一、程序效果
自动打开胖东来小程序,自动购物
二、实现
先截屏,然后利用opencv库识别下一步按键所在位置,然后使用mouse_event控制鼠标,模拟人的动作
第一步,截取屏幕
static Bitmap CaptureScreen() {int screenWidth = Screen.PrimaryScreen.Bounds.Width;int screenHeight = Screen.PrimaryScreen.Bounds.Height;Bitmap screenshot = new Bitmap(screenWidth, screenHeight);using (Graphics graphics = Graphics.FromImage(screenshot)){graphics.CopyFromScreen(0, 0, 0, 0, new System.Drawing.Size(screenWidth, screenHeight));}return screenshot; }
第二步,利用opencv库识别出位置
微信主界面如下
想要打开小程序,可以识别出上部的搜索栏,点击并输入,首先,需要截取出需要点击的位置
clickPicture的功能就是先截屏,然后选择路径为path的图片,利用MatchTemplate比较得出图片位置,模拟鼠标点击
static void clickPicture(string path) {Mat img = OpenCvSharp.Extensions.BitmapConverter.ToMat(CaptureScreen()).CvtColor(ColorConversionCodes.RGB2BGR);Mat templ = new Mat(path, ImreadModes.Color);Mat result = new Mat();Cv2.MatchTemplate(img, templ, result, TemplateMatchModes.CCoeffNormed);Cv2.MinMaxLoc(result, out _, out var maxVal, out var minLoc, out var maxLoc);var matchLoc = maxLoc;MouseEvent(MouseEventType.LeftDown, matchLoc.X + templ.Cols / 2, matchLoc.Y + templ.Rows / 2);Thread.Sleep(100); // 可以添加一些延迟以模拟人工点击MouseEvent(MouseEventType.LeftUp, matchLoc.X + templ.Cols / 2, matchLoc.Y + templ.Rows / 2); }
然后模拟键盘输入胖东来
Clipboard.SetText("胖东来"); SendKeys.SendWait("^v");
模拟点击下面的小程序搜索
再模拟点击小程序
然后依次完成自动购物