小红书自动化脚本

main
pq9azftxn 3 weeks ago
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…
Cancel
Save