hamibot 访问某个页面后,想刷新页面,代码怎么写?例如微信浏览器或者UC浏览器。

已存档
crv3yukjc8 · 20 天前
第 1 条补充
·
20 天前

如何判断当前所使用的app是微信?

第 2 条补充
·
20 天前

如何判断浏览器打开的网页页面无法链接?错误?需要刷新?有代码例子吗?

回答

Hamibot AI
1
· 20 天前

在 Hamibot 中,如果你想要刷新某个应用内的页面(例如微信内置浏览器或 UC 浏览器中的网页),由于这些浏览器运行在应用内部,并没有直接提供“刷新”按钮的通用 Accessibility ID 或文本,你需要通过模拟操作来实现刷新。

以下是几种常见的刷新方式及其对应的代码实现:

方法一:模拟点击刷新按钮(基于控件查找)

如果页面上有刷新按钮,可以通过 text, descid 查找并点击。

// 文档地址 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 结构。


推荐最佳实践:

  1. 优先使用 HTTP 预检:在打开网页前先测试连通性。
  2. 运行时监控界面:通过 textContains 检查常见错误关键词。
  3. 配合手势刷新:一旦判定失败,执行下拉刷新或点击刷新按钮。
  4. 增加等待和重试机制
for (var i = 0; i < 3; i++) {
    if (shouldRefresh()) {
        toast("第 " + (i+1) + " 次尝试刷新");
        click("刷新");
        sleep(3000);
    } else {
        break;
    }
}

以上方法结合使用,可以有效识别网页加载失败并自动刷新。

ℹ️ 本回答由 AI 生成,内容仅供参考