如何获取剪贴板的内容,并输出,代码怎么写?

090909 · 3 小时前
第 1 条补充
·
3 小时前

// 封装获取大麦APP内节目ID
function getDamaiAppItemId() {
// 点击分享,根据自己界面调整坐标/xpath
var s = id("project_detail_new_share_lottie").findOne();
btn_position_click(s);
sleep(500);
// 点击复制链接
var s = text("复制链接").findOne();
btn_position_click(s);
sleep(800);
let link = getClip();
log(link);
log(getClip());
let match = link.match(/id=(\d+)/);
return match ? match[1] : null;
}

// 调用
let itemId = getDamaiAppItemId();
if (itemId) {
toast("获取ID成功:" + itemId);
log("节目ID =", itemId);
} else {
toast("获取ID失败,请检查页面是否为演出详情页");
}

function btn_position_click(x) {
if (x) {
var b = x.bounds();
var c = click(b.centerX(), b.centerY())
console.log("点击是否成功:"+c);
}
}那为什么log(link)没有输出内容?剪贴板已有内容

回答

Hamibot AI
1
· 3 小时前
// 文档地址 https://docs.hamibot.com/

// 获取剪贴板内容
var clipText = getClip();

// 输出内容,使用 toast 气泡显示
toast('剪贴板内容是: ' + clipText);

说明:getClip() 函数用于获取系统剪贴板的文本内容。注意在 Android 10 及以上版本,需要先将 Hamibot 应用切换到前台再调用该函数,否则可能无法获取到内容。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实
Hamibot AI
1
· 3 小时前

可能的原因有几个:

  1. Android 10+ 剪贴板限制
    在 Android 10 及以上系统中,只有前台应用才能读取剪贴板。如果 Hamibot 在点击“复制链接”后没有立即回到前台,getClip() 就会返回空字符串。
    你可以在调用 getClip() 前加一句 app.launchApp("Hamibot 的包名") 让其回到前台,或直接使用 app.launch("com.hamibot.hamibot")

  2. “复制链接”按钮点击失败
    虽然 btn_position_click 打印了“点击是否成功”,但可能点击坐标偏移,或控件不可点击,导致复制并未真正执行。
    可以改用 click()s.click() 直接点击控件,而不通过坐标,例如:

    var s = text("复制链接").findOne();
    if (s && s.click()) {
        sleep(800);
    }
    
  3. log(link) 返回空字符串显示不直观
    如果 getClip() 返回 ""log("") 会输出一个空行,你可能误以为没有输出。建议这样写:

    let link = getClip();
    log("剪切板内容: [" + link + "]");
    

    这样可以清楚看到是否为空。

  4. Hamibot 的“读取剪贴板”权限未开启
    部分系统需要手动授权。进入手机「设置」→「应用」→「Hamibot」→「权限」,检查“读取剪贴板”权限是否为开启状态。

更稳妥的方案:直接从页面控件提取链接,不依赖剪贴板
如果大麦的分享弹窗中含有包含链接的控件,可以直接读取其文本属性,例如:

var s = text("复制链接").findOne();
if (s) {
    s.click();
    sleep(500);
    // 尝试从弹窗中获取链接控件
    var linkView = textContains("http").findOne(3000);
    if (linkView) {
        var link = linkView.text();
        log("链接: " + link);
        var match = link.match(/id=(\d+)/);
        return match ? match[1] : null;
    }
}

这样就不用受剪贴板限制,也更稳定。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实