C#实现仿人行为模拟鼠标拖动地图

分享如何通过编程模拟鼠标行为解决地图数据爬取难题,包括定位、鼠标点击、拖动等关键代码,助力自动化数据采集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近公司有个项目,需要爬取一些数据,如果是简单的数据都很好处理,但是目标源有些数据需要拖动地图来获取,因此第一反应的解决方法是模拟鼠标及键盘来操作地图,这里的难点是如何实现类人行为方式:按下鼠标左键、拖动鼠标,滚动地图?!

尝试了很多方式都不成功,鼠标是定位到了需要定位的地方,但是地图并没有跟着移动,搞了两天接近奔溃,终于解决了!现将DEMO中部分核心CODE贴出来,希望能帮助到有这方面需要的朋友:

// 定位到某个空白区域
Task.Delay(2000).Wait();
_xpos = _pos.MovePos.x; _ypos = _pos.MovePos.y;
MyWinApi.SetCursorPos(_xpos, _ypos);

// 关键CODE:让鼠标联接--能通过移动鼠标实现地图移动
Task.Delay(1000).Wait();
MyWinApi.mouse_event((int)MyWinApi.MouseFlag.MouseLeftDown, 0, 0, 0, 0);
Cursor.Position = new System.Drawing.Point(_xpos, _ypos);
MyWinApi.mouse_event((int)MyWinApi.MouseFlag.MouseLeftDown, 0, 0, 0, 0);

// 关键CODE:连带鼠标
Task.Delay(1000).Wait();
MyWinApi.mouse_event((int)MyWinApi.MouseFlag.MouseLeftDown | (int)MyWinApi.MouseFlag.MouseMove, 50, 50, 0, 0);

// 关键CODE:定位到需要鼠标拖动到的位置
_xpos = _pos.DragPos.x; _ypos = _pos.DragPos.y;
Task.Delay(3000).Wait();
MyWinApi.SetCursorPos(_xpos, _ypos);
// 释放链接
Task.Delay(1000).Wait();
MyWinApi.mouse_event((int)MyWinApi.MouseFlag.MouseLeftDown | (int)MyWinApi.MouseFlag.MouseLeftUp, 0, 0, 0, 0);

以上只是测验的DEMO Code,提供个思路吧! 

WinAPI-Wrapper 模拟鼠标点击 用于模拟鼠标移动点击、窗口操作等的Windows API包装器类。 API 下面是一些可用的方法的总结。有更多的方法和类,比下面列出的要多,但目的是要大致了解包装器能做什么。要查看关于特定方法的详细信息和参数的详细信息,请查看代码本身,因为它的注释很好。 Mouse.cs public static void LeftClick(); public static void RightClick(); public static void MiddleClick(); public static void LeftDown(); public static void LeftUp(); public static void RightDown(); public static void RightUp(); public static void MiddleDown(); public static void MiddleUp(); public static void Move(int x, int y); public static void LeftDrag(Point point1, Point point2, int interval, int lag); Window.cs public static bool DoesExist(string windowTitle); public static IntPtr Get(string windowTitle); public static IntPtr GetFocused(); public static void SetFocused(IntPtr hWnd); public static bool IsFocused(IntPtr hWnd); public static void Move(IntPtr hWnd, int x, int y); public static void Resize(IntPtr hWnd, int width, int height); public static void Hide(IntPtr hWnd); public static void Show(IntPtr hWnd); public static Rectangle GetDimensions(IntPtr hWnd); public static Size GetSize(IntPtr hWnd); public static Point GetLocation(IntPtr hWnd); public static string GetTitle(IntPtr hWnd); public static void SetTitle(IntPtr hWnd, string title); public static void Maximize(IntPtr hWnd); public static void Minimize(IntPtr hWnd); public static void Normalize(IntPtr hWnd); public static Bitmap Screenshot(IntPtr hWnd); public static void RemoveMenu(IntPtr hWnd); public static void Close(IntPtr hWnd); public static void DisableCloseButton(IntPtr hWnd); public static void DisableMaximizeButton(IntPtr hWnd); public static void DisableMinimizeButton(IntPtr hWnd); public static void EnableMouseTransparency(IntPtr hWnd); public static Point ConvertToWindowCoordinates(IntPtr hWnd, int x, int y); public static Point GetCoordinateRelativeToWindow(IntPtr hWnd); Desktop.cs public static Bitmap Screenshot(); public static void HideTaskBar(); public static void ShowTaskBar(); public static int GetWidth(); public static int GetHeight(); 使用 在windows api文件夹中编译代码会产生一个.dll文件。任何引用这个.dll的ccode都可以使用包装器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值