下载地址:https://www.pan38.com/share.php?code=pvvmX 提取码:4489 【仅供学习】
/**
* Auto.js 常用工具集合
* 包含屏幕操作、控件查找等基础功能
*/
module.exports = {
// 查找文本控件
findText: function(text, timeout){
return text(text).findOne(timeout || 5000);
},
// 安全点击函数
safeClick: function(obj){
if(obj){
let bounds = obj.bounds();
click(bounds.centerX(), bounds.centerY());
sleep(300 + random(200));
return true;
}
return false;
},
// 滑动函数
smartSwipe: function(startX, startY, endX, endY){
gesture(random(800,1200),
[startX + random(-5,5), startY + random(-5,5)],
[endX + random(-5,5), endY + random(-5,5)]
);
}
};
屏幕信息处理模块
const utils = require('./common_utils');
function ScreenProcessor(){
// 获取屏幕分辨率
this.getScreenSize = function(){
let size = {};
size.width = device.width;
size.height = device.height;
return size;
};
// 颜色识别函数
this.checkColor = function(x, y, targetColor){
let pixel = images.pixel(captureScreen(), x, y);
return colors.equals(pixel, targetColor);
};
// 图片特征匹配
this.imageExist = function(templatePath){
let template = images.read(templatePath);
let result = findImage(captureScreen(), template);
return result != null;
};
}
module.exports = new ScreenProcessor();
/**
* 定时任务管理系统
* 支持循环执行和条件判断
*/
const TimerTask = {
tasks: [],
addTask: function(name, interval, callback){
this.tasks.push({
name: name,
interval: interval,
callback: callback,
lastRun: 0
});
},
run: function(){
setInterval(()=>{
let now = new Date().getTime();
this.tasks.forEach(task => {
if(now - task.lastRun >= task.interval){
task.callback();
task.lastRun = now;
}
});
}, 1000);
}
};
// 示例任务
TimerTask.addTask("checkNetwork", 5000, ()=>{
if(!device.isScreenOn()){
device.wakeUp();
}
});
module.exports = TimerTask;
const THREAD_POOL = {};
const TASK_QUEUE = [];
let THREAD_ID = 0;
// 线程工作器基类
class ThreadWorker {
constructor(scriptPath) {
this.thread = threads.start(function(){});
this.id = ++THREAD_ID;
this.loadScript(scriptPath);
}
loadScript(path) {
this.thread.execScriptFile(path);
}
postMessage(data) {
this.thread.postMessage(data);
}
terminate() {
this.thread.interrupt();
}
}
// 线程池管理器
class ThreadPool {
constructor(maxThreads = 4) {
this.maxThreads = maxThreads;
this.activeThreads = 0;
}
createWorker(scriptPath) {
if(this.activeThreads >= this.maxThreads) {
return null;
}
const worker = new ThreadWorker(scriptPath);
THREAD_POOL[worker.id] = worker;
this.activeThreads++;
return worker.id;
}
dispatchTask(taskData) {
if(this.activeThreads < this.maxThreads) {
const workerId = this.createWorker(taskData.script);
if(workerId) {
THREAD_POOL[workerId].postMessage(taskData);
}
} else {
TASK_QUEUE.push(taskData);
}
}
handleThreadExit(threadId) {
delete THREAD_POOL[threadId];
this.activeThreads--;
if(TASK_QUEUE.length > 0) {
this.dispatchTask(TASK_QUEUE.shift());
}
}
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。