一、程序效果
自动打开胖东来小程序,自动购物
二、实现
先截屏,然后利用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");
模拟点击下面的小程序搜索
再模拟点击小程序
然后依次完成自动购物