You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
05autox/05组-2024软工K班现场编程任务.js

804 lines
23 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

var window = floaty.window(
<frame bg="#88000000" w="80" h="300">
<vertical padding="1">
<button id="ok1" text="随机进入一个直播间" textSize="8" h="40" />
<button id="ok3" text="自动切换直播间,点赞关注" textSize="8" h="40" />
<button id="ok4" text="设置点赞数量和速度" textSize="8" h="40" />
<button id="ok5" text="实现静态评论" textSize="8" h="40" />
<button id="ok6" text="实现动态评论" textSize="8" h="40" />
<button id="ok2" text="自动发帖" textSize="8" h="40" />
<button id="closee" text="关闭" textSize="8" h="40" />
</vertical>
</frame>
);
window.setPosition(800, 150);
window.closee.click(()=>{
window.close();
})
// 随机进入直播间
function enterRandomLive() {
sleep(2000);
swipe(500, 1200, 500, 1320, 700); // 从下往上滑动
var zhibo = desc("直播").findOne(); // 使用 findOne 方法查找控件
bounds = zhibo.bounds();
click(bounds.left + 50, bounds.top + 50);
sleep(3000);
click(337, 800);
sleep(2000);
toast("打开直播间");
}
// 自动滑屏点赞关注
function autoLikeAndFollow() {
function doubleClick(x, y) {
click(x, y);
sleep(20);
click(x, y);
sleep(20);
click(x, y);
}
var q = 3;
for (var i = 0; i < q; i++) {
for (let i = 0; i < 3; i++) {
doubleClick(500, 1300);
sleep(100);
}
sleep(1000);
var guanzhu = id("c8z").findOne();
// 获取关注按钮的边界
var bounds = guanzhu.bounds();
// 点击关注按钮的中心点
click(bounds.right + 70, bounds.top + 30);
console.log("关注成功");
// 等待1秒
sleep(1000);
// 向上滑动屏幕
swipe(500, 1700, 500, 400, 400);
// 等待4秒
sleep(4000);
}
}
// 设置点赞数量和速度
function setLike() {
// 确保无障碍服务已开启
auto.waitFor();
// 定义小红书包名
var packageName = "com.xingin.xhs";
// 创建悬浮窗
var window = floaty.window(
<frame gravity="center" bg="#88000000">
<vertical padding="10">
<text text="直播点赞控制" textColor="#ffffff" textSize="16sp" />
<input id="countInput" hint="点赞次数(默认无上限)" textColor="#ffffff" textSize="14sp" focusable="true" />
<input id="speedInput" hint="点赞间隔ms(默认200)" textColor="#ffffff" textSize="14sp" focusable="true" />
<horizontal>
<button id="start" text="开始" w="80" h="40" />
<button id="pause" text="暂停" w="80" h="40" />
<button id="ok" text="确定" w="80" h="40" />
<button id="exit" text="退出" w="80" h="40" />
</horizontal>
<text id="status" text="状态:等待开始" textColor="#ffffff" textSize="14sp" />
<text id="counter" text="已点赞0" textColor="#ffffff" textSize="14sp" />
</vertical>
</frame>
);
// 设置悬浮窗位置
window.setPosition(50, 100);
// 初始化变量
var isRunning = false;
var isPaused = false;
var clickCount = 0;
var targetCount = 1000;
var clickInterval = 200;
var clickThread = null;
var dd = 0;
// 输入框事件处理
function setupInput(windowInput) {
windowInput.on("key", function (keyCode, event) {
if (event.getAction() == event.ACTION_DOWN && keyCode == keys.back) {
window.disableFocus();
event.consumed = true;
}
});
windowInput.on("touch_down", () => {
window.requestFocus();
windowInput.requestFocus();
});
}
setupInput(window.countInput);
setupInput(window.speedInput);
// 确定按钮事件
window.ok.on("click", () => {
let input1Content = window.countInput.getText();
let input2Content = window.speedInput.getText();
if (input1Content == "") input1Content = 1000;
if (input2Content == "") input2Content = 200;
targetCount = parseInt(input1Content);
clickInterval = parseInt(input2Content);
window.disableFocus();
dd = (dd == 0 ? 1 : 0);
log("点赞次数: " + targetCount);
log("点赞间隔: " + clickInterval);
});
// 双击函数
function doubleClick(x, y) {
click(x, y);
sleep(20);
click(x, y);
sleep(20);
click(x, y);
}
// 开始按钮事件
window.start.click(() => {
if (!isRunning) {
isRunning = true;
isPaused = false;
window.start.setText("停止");
// 启动点赞线程
clickThread = threads.start(function () {
while (isRunning) {
if (!isPaused) {
try {
// 执行点赞
doubleClick(500, 1300);
clickCount++;
// 更新计数器
ui.run(() => {
window.counter.setText("已点赞:" + clickCount);
window.status.setText("状态:正在点赞");
});
// 控制点赞间隔
sleep(clickInterval);
} catch (e) {
toast("错误: " + e);
}
} else {
sleep(100);
}
}
});
} else {
// 停止点赞
isRunning = false;
window.start.setText("开始");
window.status.setText("状态:已停止");
if (clickThread != null) {
clickThread.interrupt();
}
}
});
// 暂停按钮事件
window.pause.click(() => {
if (isRunning) {
isPaused = !isPaused;
window.pause.setText(isPaused ? "继续" : "暂停");
window.status.setText("状态:" + (isPaused ? "已暂停" : "正在点赞"));
}
});
// 退出按钮事件
window.exit.on("click", () => {
window.close();
//exit(); // 退出脚本
});
// 启动小红书并进入直播间
function startXiaohongshu() {
app.launchPackage(packageName);
toast("小红书已打开");
sleep(3000);
swipe(500, 1200, 500, 1320, 700);
let zhibo = desc("直播").findOne();
if (zhibo) {
let bounds = zhibo.bounds();
click(bounds.left + 50, bounds.top + 50);
sleep(3000);
click(337, 800);
sleep(2000);
return true;
}
return false;
}
// 启动应用
if (startXiaohongshu()) {
toast("已进入直播间,请调整点赞参数");
} else {
toast("进入直播间失败");
}
// 保持脚本运行
setInterval(() => {
if (!auto.service) {
toast("无障碍服务已关闭!");
isRunning = false;
}
}, 1000);
}
// 实现静态评论
function StaticComments() {
// 请求无障碍权限
auto.waitFor();
// 定义静态评论数组
const staticComments = [
"主播好专业,讲解很细致",
"分享很实用,收获满满",
"主播声音真好听",
"今天的直播太精彩了",
"支持你,继续加油",
"这个观点说得太对了",
"学到了很多,谢谢分享",
"主播真是太有耐心了",
"这个内容很有价值",
"讲解很通俗易懂",
"主播气质真好",
"解答得很专业",
"知识点很干货",
"终于等到你的直播了",
"每次看直播都有收获",
"主播太用心了",
"点赞主播的敬业精神",
"这个主题很有意思",
"希望能多做这样的分享",
"感谢主播的分享"
];
// 动态评论生成函数
function generateDynamicComment() {
const templates = [
"现在是%s直播真精彩",
"打卡第%d次继续支持",
"已经看了%d分钟太棒了",
"第%d次来看直播越来越好"
];
const template = templates[Math.floor(Math.random() * templates.length)];
const now = new Date();
const timeStr = now.getHours() + ':' + now.getMinutes();
const count = Math.floor(Math.random() * 100) + 1;
return template.replace(/%s/, timeStr).replace(/%d/, count);
}
let usedComments = new Set();
// 获取未使用过的随机评论
function getUniqueComment() {
// 如果所有评论都已使用过,则重置记录
if (usedComments.size >= staticComments.length) {
usedComments.clear();
}
// 获取未使用过的评论
let availableComments = staticComments.filter(comment => !usedComments.has(comment));
let selectedComment = availableComments[Math.floor(Math.random() * availableComments.length)];
// 记录已使用的评论
usedComments.add(selectedComment);
return selectedComment;
}
function findCommentBox() {
// 方法1: 通过ID查找
let commentBox = id("comment_input_container").findOne(1000);
if (commentBox) return commentBox;
// 方法2: 通过文本内容查找
commentBox = textContains("说点什么").findOne(1000);
if (commentBox) return commentBox;
// 方法3: 通过描述查找
commentBox = desc("评论输入框").findOne(1000);
if (commentBox) return commentBox;
// 方法4: 通过类名查找底部评论区域
commentBox = className("android.widget.EditText").findOne(1000);
if (commentBox) return commentBox;
// 方法5: 尝试查找底部评论图标
let commentIcon = desc("评论").findOne(1000) || text("评论").findOne(1000);
if (commentIcon) {
commentIcon.click();
sleep(1000);
return className("android.widget.EditText").findOne(1000);
}
return null;
}
// 查找发送按钮的多种方法
function findSendButton() {
// 方法1: 通过文本查找
let sendBtn = text("发送").findOne(1000);
if (sendBtn) return sendBtn;
// 方法2: 通过描述查找
sendBtn = desc("发送").findOne(1000);
if (sendBtn) return sendBtn;
// 方法3: 通过ID查找
sendBtn = id("send_button").findOne(1000);
if (sendBtn) return sendBtn;
return null;
}
// 主功能函数
function autoComment() {
// 等待进入直播间
sleep(5000);
// 循环发送评论
for(let i=0;i<5; i++){
try {
// 获取一条未使用过的评论
let comment = getUniqueComment();
// 查找评论框
let commentBox = findCommentBox();
if (!commentBox) {
toast("未找到评论框,重试中...");
sleep(2000);
continue;
}
console.log("找到评论框");
toast("找到评论框");
// 点击评论框
commentBox.click();
sleep(500);
// 输入评论
setText(comment);
sleep(500);
// 点击发送按钮
let sendBtn = findSendButton();
if (sendBtn) {
sendBtn.click();
toast("评论发送成功");
}
else {
toast("未找到发送按钮");
}
// 随机等待1-2秒
sleep(random(1000, 2000));
} catch (e) {
console.error("评论发送失败:" + e);
sleep(2000);
}
}
}
// 安全退出函数
function exitScript() {
toast("脚本已停止运行");
exit();
}
// 设置退出监听
threads.start(function () {
// 监听音量下键停止脚本
events.observeKey();
events.onKeyDown("volume_down", function (event) {
exitScript();
});
});
// 主程序
try {
toast('Hello, AutoX.js');
// 等待打开小红书
app.launchApp("小红书");
sleep(5000);
// 等待进入直播间
toast("请手动进入任意直播间,然后脚本会自动开始发送评论");
toast("按音量下键可停止脚本运行");
// 开始自动评论
autoComment();
toast('end, AutoX.js');
} catch (e) {
console.error("脚本运行错误:" + e);
exitScript();
}
}
// 实现动态评论
function FeedComments() {
//2 点赞悬浮窗
var window = floaty.window(
<vertical>
<input id="input3" hint="请输入评论" textSize="16sp" focusable="true" />
<input id="input4" hint="评论次数" textSize="16sp" focusable="true" />
<button id="remarkBtn" text="开始评论" />
<button id="closeBtn" text="关闭悬浮窗" />
</vertical>
);
var dd = 0;
var state = 0;
var Static = 0;
var screenWidth = device.width;
var screenHeight = device.height;
var centerX = screenWidth / 2;
var centerY = screenHeight / 2;
var commentText = "";
var remarkCounter = 0;
// 设置悬浮窗位置
window.setPosition(device.width / 2 + 50, 50);
// 设置悬浮窗可调整位置
window.setAdjustEnabled(true);
toast("长按可调整悬浮窗位置");
// 处理输入框焦点,使键盘可以弹出
window.input3.on("touch_down", () => {
window.requestFocus();
window.input3.requestFocus();
});
window.input4.on("touch_down", () => {
window.requestFocus();
window.input4.requestFocus();
});
// 点击开始评论按钮
window.remarkBtn.on("click", () => {
window.disableFocus();
commentText = window.input3.getText() + "";
remarkCounter = parseInt(window.input4.getText());
if (commentText == "") {
commentText = "666";
}
if (isNaN(remarkCounter) || remarkCounter < 1) {
remarkCounter = 1;
}
log("评论内容: " + commentText);
log("评论次数: " + remarkCounter);
state = 1;
});
// 关闭悬浮窗
window.closeBtn.on("click", () => {
window.close();
//exit();
});
// 查找评论框的多种方法
function findCommentBox() {
// 方法1: 通过ID查找
let commentBox = id("comment_input_container").findOne(1000);
if (commentBox) return commentBox;
// 方法2: 通过文本内容查找
commentBox = textContains("说点什么").findOne(1000);
if (commentBox) return commentBox;
// 方法3: 通过描述查找
commentBox = desc("评论输入框").findOne(1000);
if (commentBox) return commentBox;
// 方法4: 通过类名查找底部评论区域
commentBox = className("android.widget.EditText").findOne(1000);
if (commentBox) return commentBox;
// 方法5: 尝试查找底部评论图标
let commentIcon = desc("评论").findOne(1000) || text("评论").findOne(1000);
if (commentIcon) {
commentIcon.click();
sleep(1000);
return className("android.widget.EditText").findOne(1000);
}
return null;
}
// 查找发送按钮的多种方法
function findSendButton() {
// 方法1: 通过文本查找
let sendBtn = text("发送").findOne(1000);
if (sendBtn) return sendBtn;
// 方法2: 通过描述查找
sendBtn = desc("发送").findOne(1000);
if (sendBtn) return sendBtn;
// 方法3: 通过ID查找
sendBtn = id("send_button").findOne(1000);
if (sendBtn) return sendBtn;
return null;
}
// 自动评论主循环
setInterval(() => {
if (state == 1) {
let commentBox = findCommentBox();
if (commentBox) {
commentBox.click();
state = 2;
} else {
toast("未找到评论框,重试中...");
}
}
else if (state == 2) {
setText(commentText);
state = 3;
}
else if (state == 3) {
let sendBtn = findSendButton();
if (sendBtn) {
sendBtn.click();
toast("评论发送成功");
remarkCounter--;
if (remarkCounter <= 0) {
state = 0;
} else {
state = 1;
sleep(5000); // 评论间隔5秒
}
} else {
toast("未找到发送按钮");
}
}
}, 500);
try {
toast('脚本已启动');
// 等待打开小红书
app.launchApp("小红书");
sleep(5000);
// 等待进入直播间
toast("请手动进入直播间,然后在悬浮窗输入评论内容和次数");
toast("点击开始评论按钮开始自动评论");
} catch (e) {
console.error("脚本运行错误:" + e);
window.close();
exit();
}
}
function autoSendPost() {
// 在这里添加自动发送帖子的代码
// 定义自动输入文字的函数
function autoInputText() {
let postContent = "这是一个自动发帖的内容,由脚本自动生成。";
let editText = className("android.widget.EditText").findOne(10000);
if (editText) {
editText.setText(postContent);
sleep(1000);
log("自动输入文字成功");
} else {
log("未找到文本输入框");
}
}
//定义手动输入文字的函数
function manualInputText() {
let postContent = rawInput("请输入您的文本", "您可以自定义文本");
let editText = className("android.widget.EditText").findOne(10000);
if (editText) {
log("请手动输入文字,并在完成后点击确定");
// waitForConfirm(); // 等待用户确认
editText.setText(postContent);
} else {
log("未找到文本输入框");
}
}
// 点击加号按钮
function clickAddButton() {
let addButton = id("dzq").findOne(1000);
if (addButton) {
// 获取addButton的父元素并触发点击事件
addButton.click();
sleep(3000);
log("加号按钮点击成功");
} else {
log("未找到加号按钮");
}
}
// 点击“文字”选项
function clickTextOption() {
let textOption = id("bgf").className("android.widget.TextView").text("文字").findOne(1000).parent();
if (textOption) {
textOption.click();
sleep(2000);
log("文字选项点击成功");
} else {
log("未找到文字选项");
}
}
// 点击“发文字笔记讨论”
function clickTextNoteDiscussion() {
let textNoteDiscussion = id("cd0").className("android.view.View").findOne();
if (textNoteDiscussion) {
textNoteDiscussion.click();
sleep(2000);
log("发文字笔记讨论选项点击成功");
} else {
log("未找到发文字笔记讨论选项");
}
}
// 输入文字并点击“下一步”
function inputTextAndProceed1() {
let nextButton = id("bga").className("android.widget.TextView").text("下一步").findOne(1000);
if (nextButton) {
nextButton.click();
sleep(3000);
log("点击下一步");
} else {
log("未找到下一步按钮");
}
}
function inputTextAndProceed2() {
let nextButton = id("g_f").className("android.widget.TextView").text("下一步").findOne(1000);
if (nextButton) {
nextButton.click();
sleep(3000);
log("点击下一步");
} else {
log("未找到下一步按钮");
}
}
// 点击“发布笔记”
function publishNote() {
let publishButton = id("an7").className("android.widget.Button").text("发布笔记").findOne(1000);
if (publishButton) {
publishButton.click();
log("帖子已发布");
} else {
log("未找到发布笔记按钮");
}
}
// 主函数
function main() {
auto();
// 定义小红书包名
var packageName = "com.xingin.xhs";
// 尝试打开小红书 APP
if (app.launchPackage(packageName)) {
toast("小红书已打开");
} else {
toast("无法打开小红书");
exit();
}
// 等待首页加载完成
sleep(5000);
let inputMethod = dialogs.select("选择输入方式", ["自动输入", "手动输入"]);
//home();
//app.launchApp("小红书");
clickAddButton();
clickTextOption();
clickTextNoteDiscussion();
// 直接执行自动输入
if (inputMethod == 0) { // 自动输入
autoInputText();
} else if (inputMethod == 1) { // 手动输入
manualInputText();
} else {
log("未选择输入方式");
alert("未选择输入方式");
return;
}
// setScreenMetrics(720,1600);
// click(600,100);
//home();
//app.launchApp("小红书");
inputTextAndProceed1(); // 第一次点击“下一步”
sleep(5000);
inputTextAndProceed2(); // 第二次点击“下一步”
publishNote();
}
main();
}
// 按钮点击事件
window.ok1.click(() => {
threads.start(function () {
enterRandomLive();
});
});
window.ok2.click(() => {
threads.start(function () {
autoSendPost();
});
});
window.ok3.click(() => {
threads.start(function () {
autoLikeAndFollow();
});
});
window.ok4.click(() => {
threads.start(function () {
setLike();
});
});
window.ok5.click(() => {
threads.start(function () {
StaticComments();
});
});
window.ok6.click(() => {
threads.start(function () {
FeedComments();// 动态评论功能代码
});
});
// 初始化
auto();
var packageName = "com.xingin.xhs";
app.launchPackage(packageName);
toast("正在打开小红书");
// 保持脚本运行
setInterval(() => { }, 1000);