parent
007bfb9fca
commit
753f3598d0
@ -0,0 +1,487 @@
|
|||||||
|
const staticComments = [
|
||||||
|
"这个直播间好有趣!",
|
||||||
|
"主播加油,我们支持你!",
|
||||||
|
"今天的主题很棒,期待下次!",
|
||||||
|
"正能量满满的一天!",
|
||||||
|
"感谢主播的分享,非常有帮助!",
|
||||||
|
"每天都是新的开始,加油!",
|
||||||
|
"相信自己,你一定可以!",
|
||||||
|
"笑口常开,快乐每一天!",
|
||||||
|
"今天又是美好的一天!",
|
||||||
|
"保持乐观,所有的努力都会有回报!",
|
||||||
|
"不忘初心,方得始终。",
|
||||||
|
"生活充满美好,值得期待!",
|
||||||
|
"心怀希望,明天会更好!",
|
||||||
|
"成功的路上,没有人是轻松的,加油!",
|
||||||
|
"每一个平凡的日子都是一种成长!",
|
||||||
|
"你所努力的样子,真的很美!",
|
||||||
|
"今天比昨天更好,明天更棒!",
|
||||||
|
"追求卓越,成就非凡!",
|
||||||
|
"一步一步走向自己想要的生活!",
|
||||||
|
"失败是成功之母,加油!",
|
||||||
|
"享受每一天,做更好的自己!",
|
||||||
|
"不负光阴,不负自己!",
|
||||||
|
"阳光总在风雨后,加油!",
|
||||||
|
"人生没有白走的路,每一步都算数!",
|
||||||
|
"你是最棒的,继续努力!",
|
||||||
|
"即使艰难,也要微笑面对!",
|
||||||
|
"今天也要元气满满!",
|
||||||
|
"付出总会有回报,不要放弃!",
|
||||||
|
"笑对生活,积极向上!",
|
||||||
|
"生活因努力而精彩!",
|
||||||
|
"每一个现在,都是我们曾经渴望的未来!",
|
||||||
|
"遇到困难也不要放弃,挺过去就好了!",
|
||||||
|
"加油,每一天都值得!",
|
||||||
|
"拥抱每一个清晨,迎接新的挑战!",
|
||||||
|
"每天都是新的开始,不怕困难!",
|
||||||
|
"保持热爱,保持前进!",
|
||||||
|
"去拼搏,去追梦,青春无悔!",
|
||||||
|
"所有的努力都会汇聚成成果,加油!",
|
||||||
|
"阳光会洒进心里,努力向前!",
|
||||||
|
"失败只是成功的拐点!",
|
||||||
|
"微笑面对每一天!",
|
||||||
|
"今天也要充满正能量!",
|
||||||
|
"每一个笑容都是幸福的种子!",
|
||||||
|
"你比你想象的更强大!",
|
||||||
|
"坚持就是胜利!",
|
||||||
|
"为梦想努力奋斗,不惧风雨!",
|
||||||
|
"每一个清晨都是新的希望!",
|
||||||
|
"用积极的态度迎接每一天!",
|
||||||
|
"成长的路上,充满美好和期待!",
|
||||||
|
"未来的美好都源于今天的努力!",
|
||||||
|
"世界上最美好的事,就是为了梦想奋斗!",
|
||||||
|
"今天又是充满希望的一天!",
|
||||||
|
"努力成就更好的自己!",
|
||||||
|
"每天努力一点点,收获无限可能!",
|
||||||
|
"保持初心,坚持到底!",
|
||||||
|
"用微笑面对生活的每一天!",
|
||||||
|
"走好脚下的路,未来才更美好!",
|
||||||
|
"勇敢追梦,未来属于你!",
|
||||||
|
"每一天都是新的希望,加油!",
|
||||||
|
"不忘初心,勇敢前行!",
|
||||||
|
"相信自己,未来一定更好!",
|
||||||
|
"无论多难,都要保持微笑!",
|
||||||
|
"今天又是新的开始!",
|
||||||
|
"你能做到,相信自己!",
|
||||||
|
"生活充满可能性!",
|
||||||
|
"坚持就是胜利!",
|
||||||
|
"做自己,勇敢追梦!",
|
||||||
|
"努力终会有回报!",
|
||||||
|
"每一个明天都充满希望!",
|
||||||
|
"走好脚下的路,未来才更精彩!",
|
||||||
|
"今天也是充满希望的一天!",
|
||||||
|
"不怕困难,勇往直前!",
|
||||||
|
"保持乐观,生活更美好!",
|
||||||
|
"心怀梦想,勇敢追逐!",
|
||||||
|
"每一天都是成长的机会!",
|
||||||
|
"不怕困难,只要你努力!",
|
||||||
|
"用微笑面对每一天!",
|
||||||
|
"做最好的自己!",
|
||||||
|
"生活因努力而精彩!",
|
||||||
|
"世界是美好的,继续加油!",
|
||||||
|
"遇到困难,也要保持微笑!",
|
||||||
|
"加油,每天都是新的开始!",
|
||||||
|
"今天也是美好的一天!",
|
||||||
|
"勇敢去做,世界会为你让路!",
|
||||||
|
"追求梦想的过程很美好!",
|
||||||
|
"保持热爱,迎接未来!",
|
||||||
|
"每一个日子都值得珍惜!",
|
||||||
|
"未来充满希望,努力加油!",
|
||||||
|
"相信自己,未来会更好!",
|
||||||
|
"每天进步一点点!",
|
||||||
|
"今天的努力成就未来的自己!",
|
||||||
|
"为自己而努力!",
|
||||||
|
"每一天都是新的开始!",
|
||||||
|
"做更好的自己!",
|
||||||
|
"心怀美好,快乐每一天!",
|
||||||
|
"你很棒,请继续保持!",
|
||||||
|
"前行路上,充满阳光!",
|
||||||
|
"为梦想奋斗每一天!",
|
||||||
|
"生活因你而精彩!",
|
||||||
|
"迎接每一个美好的明天!",
|
||||||
|
"未来属于每一个努力的人!",
|
||||||
|
"每一天都是前进的动力!",
|
||||||
|
"微笑面对每一个挑战!",
|
||||||
|
"心中有梦想,脚下有力量!",
|
||||||
|
"相信美好,未来会更好!",
|
||||||
|
"每天都在进步一点点!",
|
||||||
|
"心怀希望,前路光明!"
|
||||||
|
];
|
||||||
|
const deviceW = 1440;
|
||||||
|
const deviceH = 3200;
|
||||||
|
let isLiking = false; // 控制点赞开关
|
||||||
|
let iscomment = false;// 控制评论开关
|
||||||
|
let likeSpeed = 1000; // 初始点赞速度
|
||||||
|
let likingInterval; // 存储点赞的定时器
|
||||||
|
|
||||||
|
// 检查悬浮窗权限
|
||||||
|
if (!floaty.checkPermission()) {
|
||||||
|
toast("请授予悬浮窗权限");
|
||||||
|
floaty.requestPermission();
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建悬浮窗
|
||||||
|
let window = floaty.window(
|
||||||
|
<vertical padding="8">
|
||||||
|
<button id="toggle" text="爱猫的悬浮窗" />
|
||||||
|
<vertical id="controls" visibility="gone">
|
||||||
|
<button id="openButton" text="打开直播" />
|
||||||
|
<button id="likeButton" text="开始点赞" />
|
||||||
|
<text text="速度" textColor="#ffffff" />
|
||||||
|
<seekbar id="speedControl" max="2000" progress="500" layout_weight="1" />
|
||||||
|
<checkbox id="enableComment" text="是否发送评论" textColor="#ffffff"/>
|
||||||
|
<checkbox id="enableStaticComment" text="使用静态评论" textColor="#ffffff"/>
|
||||||
|
<input id="liveCommentInput" hint="在这里输入动态评论内容" />
|
||||||
|
<button id="startLiveButton" text="发评论" />
|
||||||
|
<button id="follow" text="关注" w="*"/>
|
||||||
|
<button id="autoRefresh" text="自动刷" w="*"/>
|
||||||
|
<button id="stopButton" text="停止运行" />
|
||||||
|
<input id="postContentInput" hint="请输入发帖内容" />
|
||||||
|
<checkbox id="isImagePost" text="图文发布" textColor="#ffffff"/>
|
||||||
|
<button id="publishPostButton" text="发布帖子" />
|
||||||
|
</vertical>
|
||||||
|
</vertical>
|
||||||
|
);
|
||||||
|
setTimeout(() => {
|
||||||
|
ui.run(() => {
|
||||||
|
window.liveCommentInput.setHintTextColor(colors.parseColor("#ffffff")); // 设置提示文字颜色为灰色
|
||||||
|
window.postContentInput.setHintTextColor(colors.parseColor("#ffffff"));
|
||||||
|
});
|
||||||
|
}, 500); // 延迟 500 毫秒
|
||||||
|
// 设置初始位置和拖动
|
||||||
|
window.setPosition(100, 100);
|
||||||
|
window.setSize(-2, -2);
|
||||||
|
|
||||||
|
// 监听触摸事件以实现拖动功能
|
||||||
|
window.toggle.setOnTouchListener(function(view, event) {
|
||||||
|
switch (event.getAction()) {
|
||||||
|
case event.ACTION_DOWN:
|
||||||
|
x = event.getRawX();
|
||||||
|
y = event.getRawY();
|
||||||
|
windowX = window.getX();
|
||||||
|
windowY = window.getY();
|
||||||
|
downTime = new Date().getTime();
|
||||||
|
return true;
|
||||||
|
case event.ACTION_MOVE:
|
||||||
|
// 更新悬浮窗位置
|
||||||
|
window.setPosition(windowX + (event.getRawX() - x), windowY + (event.getRawY() - y));
|
||||||
|
return true;
|
||||||
|
case event.ACTION_UP:
|
||||||
|
// 判断按下时间差以决定是点击还是拖动
|
||||||
|
if (new Date().getTime() - downTime < 200) {
|
||||||
|
window.toggle.performClick();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
window.toggle.click(function() {
|
||||||
|
if (window.controls.visibility === 0) {
|
||||||
|
window.controls.visibility = 8; // 收回
|
||||||
|
window.toggle.setText("展开");
|
||||||
|
} else {
|
||||||
|
window.controls.visibility = 0; // 展开
|
||||||
|
window.toggle.setText("爱猫的悬浮窗");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// 打开直播按钮事件
|
||||||
|
window.openButton.click(() => {
|
||||||
|
toast("开始运行");
|
||||||
|
threads.start(function() {
|
||||||
|
startLiveOrSignIn(); // 在新线程中调用,避免阻塞 UI 线程
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// 停止按钮事件
|
||||||
|
window.stopButton.click(() => {
|
||||||
|
toast("停止运行");
|
||||||
|
window.close(); // 关闭悬浮窗
|
||||||
|
exit(); // 停止脚本运行
|
||||||
|
});
|
||||||
|
|
||||||
|
// 点赞按钮的点击事件
|
||||||
|
window.likeButton.click(() => {
|
||||||
|
isLiking = !isLiking; // 切换点赞状态
|
||||||
|
if (isLiking) {
|
||||||
|
window.likeButton.setText("停止点赞");
|
||||||
|
startLiking(); // 开始点赞
|
||||||
|
} else {
|
||||||
|
window.likeButton.setText("开始点赞");
|
||||||
|
stopLiking(); // 停止点赞
|
||||||
|
}
|
||||||
|
});
|
||||||
|
window.publishPostButton.click(() => {
|
||||||
|
let postContent = window.postContentInput.text(); // 获取帖子内容
|
||||||
|
let isImagePost = window.isImagePost.isChecked(); // 获取是否图文发布
|
||||||
|
if (postContent) {
|
||||||
|
threads.start(() => {
|
||||||
|
createPost(postContent, isImagePost); // 调用发帖函数
|
||||||
|
});
|
||||||
|
toast("正在发布帖子...");
|
||||||
|
} else {
|
||||||
|
toast("请输入发帖内容!");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// 滑动条控制点赞速度
|
||||||
|
window.speedControl.setOnSeekBarChangeListener({
|
||||||
|
onProgressChanged: function(seekBar, progress, fromUser) {
|
||||||
|
likeSpeed = 2500-progress;
|
||||||
|
toast("当前速度: " + likeSpeed + " 毫秒");
|
||||||
|
if (isLiking) {
|
||||||
|
stopLiking();
|
||||||
|
startLiking();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 点赞功能
|
||||||
|
// 点赞功能
|
||||||
|
function startLiking() {
|
||||||
|
stopLiking(); // 确保之前的定时器被清除,避免重复
|
||||||
|
toast("开始点赞");
|
||||||
|
likingInterval = setInterval(() => {
|
||||||
|
likePost();
|
||||||
|
}, likeSpeed);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 停止点赞功能
|
||||||
|
function stopLiking() {
|
||||||
|
toast("停止点赞");
|
||||||
|
if (typeof likingInterval !== 'undefined') {
|
||||||
|
clearInterval(likingInterval); // 清除定时器
|
||||||
|
likingInterval = undefined; // 重置 likingInterval
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 点赞操作
|
||||||
|
function likePost() {
|
||||||
|
console.log("执行点赞操作");
|
||||||
|
click(900, 1000);
|
||||||
|
sleep(50);
|
||||||
|
click(900, 1000);
|
||||||
|
sleep(50);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 保持脚本运行
|
||||||
|
setInterval(() => {}, 1000);
|
||||||
|
|
||||||
|
// 打开直播功能
|
||||||
|
function startLiveOrSignIn() {
|
||||||
|
launchApp('小红书');
|
||||||
|
sleep(6000);
|
||||||
|
let left = 300;
|
||||||
|
let top = 256;
|
||||||
|
let right = 450;
|
||||||
|
let bottom = 303;
|
||||||
|
let centerX = (left + right) / 2;
|
||||||
|
let centerY = (top + bottom) / 2;
|
||||||
|
swipe(1080 / 2, 2400 / 4, 1080 / 2, 2400 * 3 / 4, 500);
|
||||||
|
sleep(1000);
|
||||||
|
click(centerX, centerY);
|
||||||
|
sleep(1000);
|
||||||
|
click(273.5, 682);
|
||||||
|
sleep(5000);
|
||||||
|
}
|
||||||
|
|
||||||
|
function startLiveOrComment(enableComment, enableStaticComment, dynamicCommentText) {
|
||||||
|
// 无限循环:直播
|
||||||
|
while (true) {
|
||||||
|
if (enableComment&&!iscomment) {
|
||||||
|
let commentBox = desc("评论输入框").clickable(true).findOne(5000);
|
||||||
|
if (commentBox) {
|
||||||
|
commentBox.click();
|
||||||
|
sleep(1000);
|
||||||
|
// 选择合适的评论内容
|
||||||
|
enableStaticComment = window.enableStaticComment.checked;
|
||||||
|
dynamicCommentText = getDynamicCommentText();
|
||||||
|
let commentText = enableStaticComment ? getStaticComment() : dynamicCommentText;
|
||||||
|
// 尝试使用 input() 方法
|
||||||
|
input(commentText);
|
||||||
|
sleep(500);
|
||||||
|
|
||||||
|
let sendButton = text("发送").findOne(3000);
|
||||||
|
if (sendButton) {
|
||||||
|
sendButton.click();
|
||||||
|
console.log("评论发送成功:" + commentText);
|
||||||
|
} else {
|
||||||
|
console.log("未找到发送按钮");
|
||||||
|
}
|
||||||
|
sleep(3000);
|
||||||
|
} else {
|
||||||
|
console.log("未找到评论框,无法发送评论");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取静态评论
|
||||||
|
function getStaticComment() {
|
||||||
|
return staticComments[Math.floor(Math.random() * staticComments.length)];
|
||||||
|
}
|
||||||
|
|
||||||
|
window.startLiveButton.click(() => {
|
||||||
|
iscomment = !iscomment;
|
||||||
|
if(iscomment){
|
||||||
|
window.startLiveButton.setText("开始评论");
|
||||||
|
} else {
|
||||||
|
window.startLiveButton.setText("停止评论");
|
||||||
|
}
|
||||||
|
let commentEnabled = window.enableComment.checked; // 检查是否启用评论
|
||||||
|
let useStaticComment = window.enableStaticComment.checked; // 检查是否使用静态评论
|
||||||
|
let liveCommentText = window.liveCommentInput.text(); // 获取直播评论内容
|
||||||
|
|
||||||
|
threads.start(() => {
|
||||||
|
startLiveOrComment(commentEnabled, useStaticComment, liveCommentText);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (commentEnabled && (useStaticComment || liveCommentText)) {
|
||||||
|
toast("开始看直播并发送评论");
|
||||||
|
} else {
|
||||||
|
toast("开始看直播,不发送评论");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
window.liveCommentInput.click(() => {
|
||||||
|
dialogs.rawInput("输入动态评论内容").then(input => {
|
||||||
|
if (input) {
|
||||||
|
window.liveCommentInput.setText(input); // 将输入内容显示在按钮上
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// 获取 liveCommentInput 的文本内容
|
||||||
|
function getDynamicCommentText() {
|
||||||
|
return window.liveCommentInput.getText();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 变量来控制自动刷的状态
|
||||||
|
let isAutoRefreshing = false;
|
||||||
|
let isAutoFollowing = false;
|
||||||
|
let autoRefreshThread;
|
||||||
|
let autoFollowThread;
|
||||||
|
|
||||||
|
// 按钮点击事件处理
|
||||||
|
window.follow.click(() => {
|
||||||
|
if (!isAutoFollowing) {
|
||||||
|
// 如果未在自动关注状态,启动自动关注
|
||||||
|
console.log("开始自动关注");
|
||||||
|
|
||||||
|
// 创建并启动线程
|
||||||
|
isAutoFollowing = true;
|
||||||
|
autoFollowThread = threads.start(() => {
|
||||||
|
while (isAutoFollowing) {
|
||||||
|
// 尝试通过 ID 查找
|
||||||
|
let followButton = id("fv").findOne(2000); // 查找 ID 为 "fu" 的按钮
|
||||||
|
|
||||||
|
if (followButton) {
|
||||||
|
followButton.click(); // 点击按钮
|
||||||
|
console.log("已点击关注(通过ID)");
|
||||||
|
} else {
|
||||||
|
// 如果未找到,尝试通过文本查找
|
||||||
|
followButton = text("关注").findOne(2000);
|
||||||
|
|
||||||
|
if (followButton) {
|
||||||
|
followButton.click(); // 点击按钮
|
||||||
|
console.log("已点击关注 (通过文本)");
|
||||||
|
} else {
|
||||||
|
console.log("未找到关注按钮 (通过ID和文本)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sleep(1000); // 等待 1 秒再进行下一次操作
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 更新按钮文本
|
||||||
|
window.follow.setText("停止关注");
|
||||||
|
} else {
|
||||||
|
// 如果正在自动关注,则停止自动关注
|
||||||
|
console.log("停止自动关注");
|
||||||
|
|
||||||
|
// 关闭线程
|
||||||
|
isAutoFollowing = false;
|
||||||
|
if (autoFollowThread) {
|
||||||
|
autoFollowThread.interrupt(); // 结束线程
|
||||||
|
}
|
||||||
|
|
||||||
|
// 恢复按钮文本
|
||||||
|
window.follow.setText("关注");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
window.autoRefresh.click(() => {
|
||||||
|
if (!isAutoRefreshing) {
|
||||||
|
isAutoRefreshing = true; // 切换状态为正在自动刷
|
||||||
|
console.log("开始自动刷");
|
||||||
|
|
||||||
|
// 启动一个新线程进行自动刷正确的操作
|
||||||
|
autoRefreshThread = threads.start(function() {
|
||||||
|
while (isAutoRefreshing) {
|
||||||
|
swipe(deviceW / 3, deviceH / 2, deviceW / 2, deviceH / 4, 100);
|
||||||
|
console.log("切换到下一个视频");
|
||||||
|
sleep(5000);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 更改按钮文本或状态可以在这里实现
|
||||||
|
window.autoRefresh.setText("停止自动刷");
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// 如果当前状态是正在自动刷,则停止它
|
||||||
|
isAutoRefreshing = false; // 切换状态为停止
|
||||||
|
if (autoRefreshThread) {
|
||||||
|
autoRefreshThread.interrupt(); // 结束线程
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("停止自动刷");
|
||||||
|
window.autoRefresh.setText("自动刷"); // 恢复按钮文本
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function createPost(content, isImagePost) {
|
||||||
|
click(539.5,2338);
|
||||||
|
sleep(3000);
|
||||||
|
if (isImagePost) {
|
||||||
|
console.log("图文发帖");
|
||||||
|
click(307, 395);
|
||||||
|
let nextBox = desc("下一步").clickable(true).findOne(3000);
|
||||||
|
if (nextBox) {
|
||||||
|
nextBox.click();
|
||||||
|
}
|
||||||
|
sleep(1500);
|
||||||
|
click(926, 2323);
|
||||||
|
sleep(2000);
|
||||||
|
click(540, 796);
|
||||||
|
sleep(1000);
|
||||||
|
setText(content);
|
||||||
|
sleep(1000);
|
||||||
|
click(964.5, 173.5);
|
||||||
|
sleep(1000);
|
||||||
|
} else {
|
||||||
|
console.log("仅文字发帖");
|
||||||
|
click(341, 2336.5);
|
||||||
|
sleep(1500);
|
||||||
|
click(374, 1088);
|
||||||
|
sleep(1500);
|
||||||
|
setText(content);
|
||||||
|
sleep(1000);
|
||||||
|
let nextBox = desc("下一步").clickable(true).findOne(3000);
|
||||||
|
if (nextBox) {
|
||||||
|
nextBox.click();
|
||||||
|
}
|
||||||
|
sleep(9000);
|
||||||
|
nextBox = desc("下一步").clickable(true).findOne(3000);
|
||||||
|
nextBox.click();
|
||||||
|
sleep(2000);
|
||||||
|
click(675, 2271);
|
||||||
|
}
|
||||||
|
console.log("发帖完成");
|
||||||
|
}
|
||||||
|
|
||||||
|
window.postContentInput.click(() => {
|
||||||
|
dialogs.rawInput("请输入发帖内容").then(input => {
|
||||||
|
if (input) {
|
||||||
|
window.postContentInput.setText(input); // 将输入内容显示在按钮上
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in new issue