function HID_position_click(x) {
if (x) {
var b = x.bounds();
var centerX = b.centerX();
var centerY = b.centerY();
// 设置随机偏移量,例如在 ±20 像素范围内
var offset = 20;
var randomX = parseInt(centerX + Math.random() * (offset * 2) - offset);
var randomY = parseInt(centerY + Math.random() * (offset * 2) - offset);
var y = surl; // 确保 surl 已定义
var Downurl = y + '/hid?cmd=touchDown:' + randomX + ',' + randomY;
var Upurl = y + '/hid?cmd=touchUp';
// 执行按下
http.get(Downurl);
// 随机等待 20ms 到 50ms
var randomSleep = parseInt(Math.random() * (50 - 20) + 20);
sleep(randomSleep);
// 执行抬起
http.get(Upurl);
console.log("执行HID点击: (" + randomX + ", " + randomY + "),持续时间: " + randomSleep + "ms");
}
}
只偏移上,下,左的点击,不向右偏移,怎么更改代码?
function HID_positionr_click(x) {
if (x) {
var b = x.bounds();
var y = "http://127.0.0.1:8866";
var Downurl = y+'/hid?cmd=touchDown:'+b.right+','+b.centerY()
var Upurl = y +'/hid?cmd=touchUp'
http.get(Downurl);
sleep(50)
http.get(Upurl);
}
}
在这个基础上修改,只偏移上,下,左的点击,不向右偏移。
HID_position_click(s,rampy,“a”);
直接在里括号里面写上具体变量可以吗?不可以的话应该怎么写?
回答
文档地址 https://docs.hamibot.com/
function HID_position_click(x) {
if (x) {
var b = x.bounds();
var centerX = b.centerX();
var centerY = b.centerY();
// 设置偏移量,只允许上、下、左方向偏移,不允许向右偏移
var offset = 20;
// X轴:只在 [-offset, 0] 范围内随机,确保不向右偏移(即不会大于centerX)
var randomX = parseInt(centerX + Math.random() * (-offset)); // 左移 0~20 像素
// Y轴:在 ±offset 范围内随机,允许上、下偏移
var randomY = parseInt(centerY + Math.random() * (offset * 2) - offset);
var y = surl; // 确保 surl 已定义
var Downurl = y + '/hid?cmd=touchDown:' + randomX + ',' + randomY;
var Upurl = y + '/hid?cmd=touchUp';
// 执行按下
http.get(Downurl);
// 随机等待 20ms 到 50ms
var randomSleep = parseInt(Math.random() * (50 - 20) + 20);
sleep(randomSleep);
// 执行抬起
http.get(Upurl);
console.log("执行HID点击: (" + randomX + ", " + randomY + "),持续时间: " + randomSleep + "ms");
}
}
修改说明:
- 原来的
randomX是在centerX ±20范围内随机,现在改为仅在centerX - 20到centerX之间随机(即只向左或居中)。 - 使用
Math.random() * (-offset)生成一个-20到0的随机偏移量,加到centerX上,从而实现 不向右偏移 的效果。 - Y 轴保持不变,仍可上下偏移。
补充回答 1
文档地址 https://docs.hamibot.com/
function HID_positionr_click(x) {
if (x) {
var b = x.bounds();
var y = "http://127.0.0.1:8866";
// 设置偏移范围
var offset = 20;
// X坐标:使用 right 边界作为基准,只向左偏移(不向右),即在 [b.right - offset, b.right] 范围内随机
var randomX = parseInt(b.right - Math.random() * offset);
// Y坐标:在 centerY 基础上上下偏移,在 [centerY - offset, centerY + offset] 范围内随机
var randomY = parseInt(b.centerY() + Math.random() * (offset * 2) - offset);
var Downurl = y + '/hid?cmd=touchDown:' + randomX + ',' + randomY;
var Upurl = y + '/hid?cmd=touchUp';
http.get(Downurl);
sleep(50);
http.get(Upurl);
console.log("执行HID点击: (" + randomX + ", " + randomY + ")");
}
}
修改说明:
- X轴偏移:以
b.right为基准,通过Math.random() * offset生成 0~20 的随机值,用b.right - random实现 仅向左偏移,不会向右超出。 - Y轴偏移:保持上下随机偏移(±20像素内)。
- 这样确保点击点始终在元素右侧边缘的 左侧、上方或下方区域,但 不会向右扩展。
补充回答 2
文档地址 https://docs.hamibot.com/
不可以这样写,你提供的语法 HID_position_click(s, rampy, "a"); 存在几个问题:
- 函数定义与参数不匹配:你调用时传了3个参数
(s, rampy, "a"),但你之前定义的HID_position_click(x)函数只接收一个参数x。 - 多余的参数会被忽略:JavaScript 中多传的参数不会报错,但无法在函数内使用,除非函数定义中声明了对应形参。
- 字符串用的是中文引号“”:代码中使用了中文全角引号
“a”,这会导致语法错误。必须使用英文半角引号"a"。
正确做法
如果你只是想点击某个控件 s,并且使用随机偏移(仅左、上、下),不需要额外参数,那么直接调用即可:
HID_position_click(s);
说明:
s是你要点击的控件(比如通过text("登录").findOne()获取)。- 函数内部会自动获取它的边界并执行带偏移的点击。
- 不需要传其他无意义的参数如
rampy或"a"。
如果你需要扩展功能(例如传入偏移量或URL)
你应该修改函数定义,明确接收所需参数。例如:
// 修改后的函数定义:支持自定义偏移量和服务器地址
function HID_position_click(view, offset, serverUrl) {
if (!view) return;
var b = view.bounds();
var centerX = b.centerX();
var centerY = b.centerY();
// 默认值处理
offset = offset || 20; // 默认偏移20像素
serverUrl = serverUrl || "http://127.0.0.1:8866";
// X: 只向左偏移(从 centerX 开始向左最多 offset 像素)
var randomX = parseInt(centerX - Math.random() * offset);
// Y: 上下偏移
var randomY = parseInt(centerY + Math.random() * (offset * 2) - offset);
var downUrl = serverUrl + '/hid?cmd=touchDown:' + randomX + ',' + randomY;
var upUrl = serverUrl + '/hid?cmd=touchUp';
http.get(downUrl);
sleep(50);
http.get(upUrl);
console.log("执行HID点击: (" + randomX + ", " + randomY + ")");
}
调用方式示例:
// 使用默认偏移和默认地址
HID_position_click(s);
// 自定义偏移为10像素,自定义服务器地址
HID_position_click(s, 10, "http://192.168.1.100:8866");
总结
- ✅ 正确写法是:
HID_position_click(s); - ❌ 错误写法:
HID_position_click(s, rampy, “a”);(参数不匹配 + 中文引号) - ✅ 如需传参,请在函数定义中声明,并使用英文引号。
确保你的函数调用与其定义一致,并且参数有意义。