VIP鼠标事件模拟
概述
FBro提供了完整的鼠标事件模拟功能,支持鼠标点击、移动、滚轮操作等。所有鼠标操作都需要通过VIP控制接口来实现。
基础用法
获取控制接口
所有鼠标操作都需要先获取VIP控制接口:
csharp
using (var vip_control = browser.GetVIPControl())
{
var advanced = vip_control.GetAdvancedControl();
// 在这里执行鼠标操作
}鼠标操作方法
1. 鼠标点击
简单点击
csharp
using (var vip_control = browser.GetVIPControl())
{
var advanced = vip_control.GetAdvancedControl();
// 在坐标(100, 200)处点击左键,延迟50毫秒
advanced.DispatchMouseClick(100, 200, 0, 50);
}精确点击(推荐)
csharp
// 模拟完整的点击过程:按下 -> 延迟 -> 释放
using (var vip_control = browser.GetVIPControl())
{
var advanced = vip_control.GetAdvancedControl();
advanced.DispatchMouseDown(buttonX, buttonY, 0); // 按下左键
Thread.Sleep(50); // 延迟50毫秒
advanced.DispatchMouseUp(buttonX, buttonY, 0); // 释放左键
}2. 鼠标移动
csharp
using (var vip_control = browser.GetVIPControl())
{
var advanced = vip_control.GetAdvancedControl();
// 移动鼠标到坐标(32, 40)
advanced.DispatchMouseMove(32, 40);
Thread.Sleep(100); // 延迟等待移动完成
}3. 鼠标滚轮
csharp
using (var vip_control = browser.GetVIPControl())
{
var advanced = vip_control.GetAdvancedControl();
// 垂直滚动:向上滚动1000像素(weely为负数)
advanced.DispatchMouseWeel(0, 0, 0, -1000);
// 水平滚动:向右滚动500像素(weelx为正数)
advanced.DispatchMouseWeel(0, 0, 500, 0);
}4. 完整操作示例
csharp
using (var vip_control = browser.GetVIPControl())
{
var advanced = vip_control.GetAdvancedControl();
// 1. 滚动页面到顶部(weely为负数向上滚动)
advanced.DispatchMouseWeel(0, 0, 0, -1000);
Thread.Sleep(500);
// 2. 移动鼠标到目标位置
advanced.DispatchMouseMove(32, 40);
Thread.Sleep(100);
// 3. 点击目标元素
advanced.DispatchMouseClick(32, 40, 0, 50);
}方法详细说明
DispatchMouseClick
语法:
csharp
void DispatchMouseClick(int x, int y, int type, int delay)参数:
| 参数 | 类型 | 说明 |
|---|---|---|
x | int | 点击的X坐标 |
y | int | 点击的Y坐标 |
type | int | 鼠标按键类型:0=左键,1=中键,2=右键 |
delay | int | 点击延迟时间(毫秒) |
DispatchMouseDown
语法:
csharp
void DispatchMouseDown(int x, int y, int type)参数:
| 参数 | 类型 | 说明 |
|---|---|---|
x | int | 按下的X坐标 |
y | int | 按下的Y坐标 |
type | int | 鼠标按键类型:0=左键,1=中键,2=右键 |
DispatchMouseUp
语法:
csharp
void DispatchMouseUp(int x, int y, int type)参数:
| 参数 | 类型 | 说明 |
|---|---|---|
x | int | 释放的X坐标 |
y | int | 释放的Y坐标 |
type | int | 鼠标按键类型:0=左键,1=中键,2=右键 |
DispatchMouseMove
语法:
csharp
void DispatchMouseMove(int x, int y)参数:
| 参数 | 类型 | 说明 |
|---|---|---|
x | int | 目标X坐标 |
y | int | 目标Y坐标 |
DispatchMouseWeel
语法:
csharp
void DispatchMouseWeel(int x, int y, int weelx, int weely)参数:
| 参数 | 类型 | 说明 |
|---|---|---|
x | int | 滚轮事件的X坐标 |
y | int | 滚轮事件的Y坐标 |
weelx | int | 水平滚动:负数向左,正数向右(像素单位) |
weely | int | 垂直滚动:负数向上,正数向下(像素单位) |
API说明:
csharp
// 参数:
// x: 横坐标
// y: 纵坐标
// weelx: 横向滚动:负数向左,正数向右,以像素点位单位
// weely: 纵向滚动:负数向上,正数向下,以像素点位单位
void DispatchMouseWeel(int x, int y, int weelx, int weely);实际应用示例
1. 模拟用户浏览行为
csharp
public void SimulateUserBrowsing(IFBroSharpBrowser browser)
{
using (var vip_control = browser.GetVIPControl())
{
var advanced = vip_control.GetAdvancedControl();
// 滚动查看页面内容
for (int i = 0; i < 3; i++)
{
advanced.DispatchMouseWeel(400, 300, 0, 300); // 向下滚动(weely为正数)
Thread.Sleep(1000); // 模拟阅读时间
}
// 返回顶部
advanced.DispatchMouseWeel(400, 300, 0, -900); // 向上滚动(weely为负数)
Thread.Sleep(500);
}
}2. 点击特定按钮
csharp
public void ClickButton(IFBroSharpBrowser browser, int buttonX, int buttonY)
{
using (var vip_control = browser.GetVIPControl())
{
var advanced = vip_control.GetAdvancedControl();
// 先移动到按钮位置(模拟真实用户行为)
advanced.DispatchMouseMove(buttonX, buttonY);
Thread.Sleep(100);
// 执行点击
advanced.DispatchMouseDown(buttonX, buttonY, 0);
Thread.Sleep(50);
advanced.DispatchMouseUp(buttonX, buttonY, 0);
}
}3. 拖拽操作
拖拽操作原理: 拖拽 = 鼠标按下左键 + 移动 + 释放左键
csharp
public void DragElement(IFBroSharpBrowser browser, int fromX, int fromY, int toX, int toY)
{
using (var vip_control = browser.GetVIPControl())
{
var advanced = vip_control.GetAdvancedControl();
// 移动到起始位置
advanced.DispatchMouseMove(fromX, fromY);
Thread.Sleep(100);
// 按下鼠标左键(开始拖拽)
advanced.DispatchMouseDown(fromX, fromY, 0);
Thread.Sleep(100);
// 拖拽到目标位置
advanced.DispatchMouseMove(toX, toY);
Thread.Sleep(200);
// 释放鼠标左键(结束拖拽)
advanced.DispatchMouseUp(toX, toY, 0);
}
}简化拖拽操作
csharp
// 核心拖拽流程:按下 → 移动 → 释放
using (var vip_control = browser.GetVIPControl())
{
var advanced = vip_control.GetAdvancedControl();
advanced.DispatchMouseDown(fromX, fromY, 0); // 起始位置按下左键
Thread.Sleep(50);
advanced.DispatchMouseMove(toX, toY); // 移动到目标位置
Thread.Sleep(50);
advanced.DispatchMouseUp(toX, toY, 0); // 目标位置释放左键
}最佳实践
- 添加延迟:在操作之间添加适当的延迟,模拟真实用户行为
- 坐标精确:确保点击坐标准确,可以先获取元素位置
- 异常处理:使用
using语句确保VIP控制接口正确释放 - 操作顺序:对于复杂操作,按照鼠标移动→按下→移动→释放的顺序执行
- 测试验证:在实际使用前测试坐标和操作的准确性
FBro点击按钮示例代码:
// 模拟鼠标点击搜索按钮
using (var vip_control = browser.GetVIPControl())
{
var advanced = vip_control.GetAdvancedControl();
advanced.DispatchMouseDown(buttonX, buttonY, 0);
Thread.Sleep(50);
advanced.DispatchMouseUp(buttonX, buttonY, 0);
}