回答
实现微信小程序的自动填表提交,Hamibot 可以通过无障碍服务(Accessibility Service)模拟点击和输入操作。但由于微信小程序运行在微信容器内,其界面元素有时无法被标准无障碍接口完全识别,因此需要针对具体小程序的 UI 结构编写脚本。
以下是实现该功能的完整方案、代码示例及注意事项。
1. 前置准备
- 权限开启:确保手机已授予 Hamibot 无障碍服务权限,且微信未被后台清理。
- 环境配置:在 Hamibot 控制台创建任务,选择对应的设备。
- UI 分析:使用 Hamibot 的“控件捕获”功能查看目标小程序表单元素的文本、ID 或类名,以便在脚本中定位。
2. 脚本逻辑设计
脚本主要包含以下步骤:
- 启动微信应用。
- 进入指定的小程序(通过搜索或最近使用)。
- 等待页面加载完成。
- 遍历表单输入框并填入数据。
- 点击提交按钮。
- 处理可能的弹窗或验证。
3. 代码示例
以下代码遵循 Rhino 1.7.15 引擎规范,避免使用箭头函数和默认参数,确保兼容性。
// 文档地址 https://docs.hamibot.com/
// 微信小程序自动填表提交示例脚本
function main() {
var packageName = "com.tencent.mm";
var miniProgramName = "目标小程序名称";
// 1. 启动微信
launchApp("微信");
sleep(2000);
// 2. 查找并进入小程序
// 注意:不同版本微信入口可能不同,这里假设通过搜索或特定路径进入
// 实际使用时需根据控件捕获结果调整选择器
var searchBtn = text("发现").findOne(5000);
if (searchBtn) {
click(searchBtn.bounds().centerX(), searchBtn.bounds().centerY());
sleep(1000);
text("小程序").findOne().click();
sleep(1000);
// 搜索小程序
text("搜索").findOne().click();
setText(miniProgramName);
pressKey(66); // 回车键
sleep(2000);
// 点击进入小程序
text(miniProgramName).findOne().click();
}
// 3. 等待页面加载
toastLog("等待页面加载...");
sleep(3000);
// 4. 填写表单
// 假设表单有明确的提示文字,如"姓名"、"电话"
fillInput("姓名", "张三");
fillInput("手机号", "13800138000");
// 5. 点击提交
var submitBtn = text("提交").findOne(5000);
if (submitBtn) {
submitBtn.click();
toastLog("提交成功");
} else {
toastLog("未找到提交按钮");
}
}
// 辅助函数:填充输入框
function fillInput(labelText, value) {
var inputNode = text(labelText).findOne(3000);
if (inputNode) {
// 尝试点击输入框
inputNode.parent().click();
sleep(500);
// 设置文本
setText(value);
sleep(500);
} else {
toastLog("未找到字段:" + labelText);
}
}
main();
4. 最佳实践建议
- 选择器优化:优先使用
text()匹配可见文本,比 ID 更稳定。如果文本动态变化,可使用textMatches()配合正则表达式。 - 等待机制:小程序加载速度不一,务必在关键操作前使用
sleep()或waitFor()确保元素就绪,避免因超时导致脚本报错。 - 异常处理:增加对弹窗(如授权请求、验证码)的判断逻辑。如果遇到验证码,脚本应暂停并通知人工介入。
- 坐标备用:当控件无法获取时,可记录屏幕坐标作为备选方案,但需注意屏幕分辨率适配问题。
5. 风险与限制
- 合规性:自动化操作可能违反微信用户服务协议,存在账号被封禁的风险,请谨慎使用。
- 技术限制:部分小程序采用 Canvas 绘制或自定义渲染,无障碍服务无法识别内部元素,此类情况无法通过 Hamibot 直接自动化。
- 维护成本:小程序更新频繁,UI 结构变化会导致脚本失效,需定期维护。
如果在执行过程中遇到具体的控件无法识别问题,建议使用 Hamibot 在线编辑器的“控件捕获”功能重新确认节点信息。
ℹ️ 内容由 AI 生成,可能不准确,请注意核实