const { telephone } = hamibot.env;
	toastLog(telephone); // 打印并显示空白内容

telephone 是多行文字,如何循环取到每行

HAMI_8721267164 · 7 天前
第 1 条补充
·
7 天前

className("android.widget.EditText").findOne()
找到输入手机号码的输入框后,需要输入手机号码

第 2 条补充
·
7 天前

每个号码赠送八次

回答

Hamibot AI
1
· 7 天前

文档地址 https://docs.hamibot.com/

你可以将 hamibot.env 中的多行文本按行分割,然后通过循环逐行处理。由于 telephone 是一个包含多行文字的字符串,通常每行之间会用换行符 \n 分隔。

以下是实现方式:

// 获取多行电话号码
const { telephone } = hamibot.env;

// 检查是否为空
if (!telephone) {
    toastLog('未获取到电话号码');
} else {
    // 使用 split('\n') 将字符串按行分割成数组
    const lines = telephone.split('\n').filter(line => line.trim() !== '');
    
    // 循环处理每一行
    for (let i = 0; i < lines.length; i++) {
        const line = lines[i].trim(); // 去除首尾空格
        toastLog('第 ' + (i + 1) + ' 行: ' + line);
        // 这里可以对每一行进行后续操作,例如输入、发送等
        sleep(1000); // 避免弹窗过快
    }
}

说明:

  • split('\n'):将字符串按换行符拆分为数组。
  • .filter(line => line.trim() !== ''):过滤掉空行或纯空白的行。
  • trim():去除每行前后的空格或制表符。
  • sleep(1000):每次提示后暂停一秒,避免气泡消息显示过快。

这样你就可以依次获取并处理 telephone 配置中的每一行内容了。


补充回答 1

文档地址 https://docs.hamibot.com/

找到输入框后,你可以使用 setText() 方法向手机号输入框中输入号码。以下是完整的示例代码:

// 找到手机号输入框
var input = className("android.widget.EditText").findOne();

// 假设你要输入的手机号码
var phoneNumber = "13800138000";

// 输入手机号码
input.setText(phoneNumber);

如果你想逐行输入从环境变量读取的手机号,可以结合上一问的方式处理:

const { telephone } = hamibot.env;

if (!telephone) {
    toastLog('未获取到电话号码');
} else {
    // 按行分割并去除空行
    const phoneNumbers = telephone.split('\n').filter(line => line.trim() !== '');
    
    for (let i = 0; i < phoneNumbers.length; i++) {
        let phone = phoneNumbers[i].trim();
        
        // 确保是有效的手机号格式(简单判断)
        if (/^1[3-9]\d{9}$/.test(phone)) {
            var input = className("android.widget.EditText").findOne();
            input.setText(phone);
            toastLog('已输入: ' + phone);
            sleep(2000); // 等待页面响应
        } else {
            toastLog('无效号码,跳过: ' + phone);
        }
    }
}

注意事项:

  • setText()覆盖输入框原有内容。
  • 如果输入框已有内容且需要追加,可先用 getText() 获取当前文本再拼接。
  • 确保脚本有足够时间等待输入框出现,必要时可加超时参数:findOne(5000)

这样就可以稳定地找到输入框并完成手机号输入操作。


补充回答 2

文档地址 https://docs.hamibot.com/

如果你需要为每个手机号码执行“赠送八次”的操作,可以结合环境变量中的号码列表,在循环中对每个号码重复执行 8 次任务。

以下是一个完整的示例脚本逻辑:

const { telephone } = hamibot.env;

if (!telephone) {
    toastLog('未获取到电话号码');
} else {
    // 按行分割号码并过滤空行
    const phoneNumbers = telephone.split('\n').filter(line => line.trim() !== '');
    
    for (let i = 0; i < phoneNumbers.length; i++) {
        let phone = phoneNumbers[i].trim();
        
        if (!/^1[3-9]\d{9}$/.test(phone)) {
            toastLog('无效号码,跳过: ' + phone);
            continue;
        }

        // 每个号码执行 8 次赠送操作
        for (let j = 0; j < 8; j++) {
            toastLog(`正在处理第 ${i + 1} 个号码: ${phone},第 ${j + 1} 次赠送`);

            // === 此处添加你的具体操作步骤 ===
            // 例如:找到输入框并输入手机号
            var input = className("android.widget.EditText").findOne(5000);
            if (input) {
                input.setText(phone);
            } else {
                toastLog('未找到输入框,跳过本次');
                sleep(2000);
                continue;
            }

            // 模拟点击“赠送”按钮(根据实际控件调整)
            var btn = text("赠送").findOne(2000);
            if (btn) {
                btn.click();
            }

            // 等待操作完成(可根据实际情况调整时间或加等待条件)
            sleep(3000);

            // 如果有“确认”、“返回”等弹窗,可在此处理
            // 例如自动点确定
            // text("确定").findOne(1000)?.click();
            // sleep(2000);
        }

        toastLog(`号码 ${phone} 的 8 次赠送已完成`);
        sleep(2000); // 号码间间隔
    }

    toastLog('所有号码赠送任务完成');
}

说明:

  • 外层循环:遍历每一个手机号。
  • 内层循环:每个号码执行 8 次操作。
  • 使用正则 /^1[3-9]\d{9}$/ 判断是否为合法中国大陆手机号。
  • sleep() 用于控制节奏,防止操作过快导致失败。
  • 你可以根据实际界面调整按钮文本(如“立即赠送”、“提交”等)和控件选择器。

建议:

  • 在正式运行前先测试单次流程是否能走通。
  • 添加日志输出和异常判断提高稳定性。
  • 若页面在多次操作后会刷新或跳转,注意重新定位输入框或处理导航逻辑。

这样就能实现“每个号码赠送八次”的自动化需求。

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