hamibot 访问某个页面后,想刷新页面,代码怎么写?例如微信浏览器或者UC浏览器。
如何判断当前所使用的app是微信?
如何判断浏览器打开的网页页面无法链接?错误?需要刷新?有代码例子吗?
回答
在 Hamibot 中,如果你想要刷新某个应用内的页面(例如微信内置浏览器或 UC 浏览器中的网页),由于这些浏览器运行在应用内部,并没有直接提供“刷新”按钮的通用 Accessibility ID 或文本,你需要通过模拟操作来实现刷新。
以下是几种常见的刷新方式及其对应的代码实现:
方法一:模拟点击刷新按钮(基于控件查找)
如果页面上有刷新按钮,可以通过 text, desc 或 id 查找并点击。
// 文档地址 https://docs.hamibot.com/
// 尝试通过常见文本查找刷新按钮
if (text("刷新").exists()) {
text("刷新").findOne().click();
} else if (desc("刷新").exists()) {
desc("刷新").findOne().click();
} else {
// 自定义提示
toast("未找到刷新按钮");
}
方法二:使用快捷键刷新(适用于支持快捷键的浏览器)
某些浏览器支持快捷键,如 UC 浏览器可能支持菜单键 + R,但安卓端通常不开放全局快捷键。此方法适用性较低。
方法三:下拉刷新(模拟手势)
很多现代浏览器支持下拉刷新,可以模拟从屏幕中间向下拖动的手势:
// 文档地址 https://docs.hamibot.com/
// 模拟下拉刷新手势
function pullToRefresh() {
var width = device.width;
var height = device.height;
// 起点:屏幕中央偏上一点
var x = width / 2;
var y1 = height / 3;
var y2 = height / 2;
// 向下拉再释放,模拟下拉刷新
gesture(1000, [x, y1], [x, y2]);
sleep(1000);
}
pullToRefresh();
方法四:重新打开链接(最可靠)
如果无法准确识别刷新按钮,可以选择退出当前页面并重新打开 URL(前提是你知道要访问的链接):
// 文档地址 https://docs.hamibot.com/
// 示例:通过 Intent 重新打开网页
var url = "https://example.com";
app.openUrl(url);
sleep(3000); // 等待加载
建议:
- 对于 微信浏览器,推荐使用 方法一(查找“刷新”文字)或 方法三(下拉刷新)。
- 对于 UC 浏览器,也可以尝试查找带有“重新加载”、“刷新”等标签的控件。
你还可以结合 waitForPackage("com.tencent.mm") 等函数确保目标应用已启动。
waitForPackage("com.tencent.mm"); // 等待微信界面出现
根据实际界面元素调整选择策略,建议配合 Hamibot 的“拾取器”工具查看具体控件信息。
补充回答 1
你可以通过获取当前前台应用的包名来判断是否是微信。微信的包名为 com.tencent.mm,使用 Hamibot 提供的 currentPackage() 函数即可获取当前正在运行的应用包名。
判断当前 App 是否为微信的代码:
// 文档地址 https://docs.hamibot.com/
if (currentPackage() === 'com.tencent.mm') {
toast('当前应用是微信');
} else {
toast('当前应用不是微信');
}
补充说明:
currentPackage():返回当前处于前台的应用的包名。- 微信的固定包名是
com.tencent.mm(注意不是com.tencent.weixin或其他变体)。 - 该方法不需要任何权限,稳定可靠。
你也可以结合 waitForPackage() 来等待微信启动:
// 等待微信界面出现,最多等待 10 秒
if (waitForPackage('com.tencent.mm', 10000)) {
toast('已进入微信');
} else {
toast('等待微信超时');
}
这种方式常用于自动化脚本中确保目标应用已打开。
补充回答 2
在 Hamibot 中,浏览器打开的网页是否“无法链接”或“需要刷新”,通常是指网络错误页面(如 Chrome 的 ERR_CONNECTION_FAILED)、空白页、超时或服务器返回错误状态码等情况。
由于 Hamibot 本身不直接提供对 WebView 内容的深度检测能力(如 JavaScript 注入),你只能通过以下方式间接判断:
✅ 方法一:通过页面内容特征判断(基于控件文本)
大多数浏览器在加载失败时会显示特定文字,例如:
- “无法访问此网站”
- “该网页无法正常运作”
- “ERR_” 开头的错误
- “请检查网络连接”
- “刷新”
你可以查找这些文本是否存在来判断是否需要刷新。
示例代码:
// 文档地址 https://docs.hamibot.com/
function shouldRefresh() {
// 常见错误提示关键词
var errorIndicators = [
"无法访问", "连接失败", "ERR_", "超时", "网络连接", "页面无法显示",
"找不到网页", "502", "503", "404", "403", "出错"
];
for (var i = 0; i < errorIndicators.length; i++) {
if (textContains(errorIndicators[i]).exists()) {
return true;
}
}
// 也可以检查是否有“刷新”按钮(但不是加载中)
if (textMatches(/(刷新|重试|重载)/).exists() && !textContains("加载中").exists()) {
return true;
}
return false;
}
// 使用示例
if (shouldRefresh()) {
toast("页面加载失败,尝试刷新");
// 执行刷新操作(比如点击刷新按钮)
if (text("刷新").exists()) {
text("刷新").findOne().click();
} else {
// 模拟下拉刷新
gesture(1000, [device.width / 2, device.height / 3], [device.width / 2, device.height / 2]);
}
} else {
toast("页面正常");
}
✅ 方法二:结合 HTTP 请求预判页面可用性(推荐用于已知 URL)
如果你知道要打开的网页地址,可以在启动浏览器前先用 http.get() 测试是否能正常访问。
示例代码:
// 文档地址 https://docs.hamibot.com/
function canAccess(url) {
try {
var res = http.get(url, {
timeout: 10000,
headers: {
'User-Agent': 'Mozilla/5.0 (Linux; Android) Hamibot Script'
}
});
if (res.statusCode >= 200 && res.statusCode < 300) {
log("页面可访问,状态码:" + res.statusCode);
return true;
} else {
log("服务器返回错误:" + res.statusCode);
return false;
}
} catch (e) {
log("请求失败:" + e.message);
return false;
}
}
// 示例使用
var targetUrl = "https://example.com";
if (!canAccess(targetUrl)) {
toast("目标页面无法访问,可能需要刷新或检查网络");
} else {
app.openUrl(targetUrl); // 正常打开
}
⚠️ 注意:这种方法适用于你能控制访问流程的情况。如果网页已经由用户手动打开,则仅作辅助判断。
✅ 方法三:检测空白页或标题异常
某些浏览器在失败时标题为“未命名”、“新标签页”或为空。
// 尝试查找标题类控件(部分浏览器支持)
if (text("新标签页").exists() || text("无标题").exists()) {
toast("可能是空白页或加载失败");
}
但这种方式兼容性较差,依赖具体浏览器 UI 结构。
推荐最佳实践:
- 优先使用 HTTP 预检:在打开网页前先测试连通性。
- 运行时监控界面:通过
textContains检查常见错误关键词。 - 配合手势刷新:一旦判定失败,执行下拉刷新或点击刷新按钮。
- 增加等待和重试机制:
for (var i = 0; i < 3; i++) {
if (shouldRefresh()) {
toast("第 " + (i+1) + " 次尝试刷新");
click("刷新");
sleep(3000);
} else {
break;
}
}
以上方法结合使用,可以有效识别网页加载失败并自动刷新。