const { telephone } = hamibot.env;
toastLog(telephone); // 打印并显示空白内容
telephone 是多行文字,如何循环取到每行
第 1 条补充
· 7 天前
className("android.widget.EditText").findOne()
找到输入手机号码的输入框后,需要输入手机号码
第 2 条补充
· 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 生成,内容仅供参考