简介
AutoX.js 是一款不需要Root权限的 JavaScript 自动化软件,基于 Auto.js 4.1 版本的基础上迭代,使用 Rhino 1.7.13 作为脚本引擎,支持 ES5 与部分 ES6 特性。
- 学习 AutoX.js 的 API 之前,建议先学习 JavaScript 的基本语法。
- 如果想要在电脑上开发 AutoX.js,可以使用 VSCode 以及 AutoX.js 插件。
- 如果想要使用 TypeScript 来开发,目前有开发者公布了一个 相关工具。
- 论坛地址:http://www.autoxjs.com/
AutoX.js 下载地址
在 Github Releases 下载。
估计和它大哥auto.js一样,由于风险被盯上后,挂壁了!!!
这里提供个云盘下载地址:
链接: https://pan.baidu.com/s/1lr-GFuxTb33Yb4g3TkSXeg?pwd=1234
提取码: 1234
demo举例操作
工具盒子:
用来截取关键饿了么、京东的关键登录信息。
1、用vs code编辑
下面两个文件在一个文件夹下。
project.json
{
"name": "工具盒子",
"main": "main.js",
"ignore": [
"build"
],
"packageName": "com.xcj.tool",
"versionName": "1.0.0",
"versionCode": 1
}
Main.js
"ui";
ui.layout(
<vertical>
<text text="饿了么登录信息" textStyle="bold" textSize="18sp" textColor="black" />
<input id="elmBeforeInfo" lines="3" hint="请输入饿了么的登录信息" />
<button id="substr1" text="开始截取" />
<text id="elmTip" lines="1" textColor="red" textSize="14sp" />
<text id="elmAfterInfo" lines="5" text="" textSize="14sp" />
<button id="elmCopy" layout_gravity="right" w="auto" h="auto" text="复制" />
<text text="京东登录信息" textStyle="bold" textSize="18sp" textColor="black" />
<input id="jdBeforeInfo" lines="3" hint="请输入京东的登录信息" />
<button id="substr2" text="开始截取" />
<text id="jdTip" lines="1" textColor="red" textSize="14sp" />
<text id="jdAfterInfo" lines="5" text="" textSize="14sp" />
<button id="jdCopy" layout_gravity="right" w="auto" h="auto" text="复制" />
</vertical>
);
//截取饿了么登录信息
ui.substr1.click(function () {
// toast("点击了第一个“开始截取”按钮!");
var url = "http://服务器ip:8081/elmSubstr";
var input = ui.elmBeforeInfo.getText();
http.post(url, {
"input": input
}, {}, function (res, err) {
if (err) {
console.error(err);
return null;
}
if (res.statusCode === 200) {
var jsonBody = res.body.json();
ui.run(() => {
ui.elmTip.setText(jsonBody.msg);
ui.elmAfterInfo.setText(jsonBody.data);
});
} else {
toast("接口请求失败:" + res.statusCode + "\n" + res.statusMessage);
}
});
})
//复制饿了么关键信息
ui.elmCopy.click(function () {
if ("" == ui.elmAfterInfo.getText()) {
toast("请先截取有效信息!");
} else {
setClip(ui.elmAfterInfo.getText());
toast("复制成功!");
}
})
//截取京东登录信息
ui.substr2.click(function () {
// toast("点击了第二个“开始截取”按钮!");
try {
var url = "http://服务器ip:8081/jdSubstr";
var input = ui.jdBeforeInfo.getText();
http.post(url, {
"input": input
}, {}, function (res, err) {
if (err) {
console.error(err);
return;
}
if (res.statusCode === 200) {
var jsonBody = res.body.json();
ui.run(() => {
ui.jdTip.setText(jsonBody.msg);
ui.jdAfterInfo.setText(jsonBody.data);
});
} else {
toast("接口请求失败:" + res.statusCode + "\n" + res.statusMessage);
}
});
} catch (error) {
console.error(error);
}
})
//复制京东关键信息
ui.jdCopy.click(function () {
if ("" == ui.jdAfterInfo.getText()) {
toast("请先截取有效信息!")
} else {
setClip(ui.jdAfterInfo.getText());
toast("复制成功!");
}
})
2、手机安装autox app
3、引入代码文件夹
4、打包or运行
得物脚本
模拟用户的屏幕点击操作,刷浏览量。n年前的版本了,现在样式已经变了!
project.json
{
"name": "得物,跑起来",
"main": "main.js",
"ignore": [
"build"
],
"packageName": "com.dewu.auto",
"versionName": "1.0.0",
"versionCode": 1
}
main.js
//账密
var infoList = [
{ userName: "199xxxxxxxx", passWord: "123456" },
{ userName: "131xxxxxxxx", passWord: "123456" }
];
var target = "小虐";
console.show();
if (startApp()) {
for (var i = 0; i < infoList.length; i++) {
var user = infoList[i];
//1、使用账密登录
dewuLogin(user["userName"],user["passWord"]);
//2、检查是否有弹广告,若有则点击广告的关闭按钮
if (id("iv_close").exists()) {
id("iv_close").findOne().click();
console.log("发现广告,尝试关闭了广告...");
if (!id("iv_close").exists()) {
console.log("广告已被关闭!");
sleep(500);
}
} else {
console.log("未发现可关闭的弹窗广告!");
}
//3、找到目标联系人
findTargetMessages();
sleep(1000);
//4、找到并访问该联系人的最后一条推文消息
findLastMessages();
sleep(1000);
//5、检查是否被得物安全风控了
if (checkLoding()) {
//停止脚本
engines.stopAllAndToast();
}
//6、退出登录返回到登录界面
backAndLogout();
}
}
// sleep(5000);
// console.hide();
//启动App
function startApp() {
app.launchApp("得物");
//未登录弹出的登录界面包含"btn_other_login";tab_service表示底部导航栏的“探索”菜单。
while (!(id("btn_other_login").exists() || id("tab_service").exists())) {
console.log("等待APP启动...");
sleep(1000);
}
if (id("btn_other_login").exists()) {
id("btn_other_login").click();
sleep(500);
}
console.log("app启动成功!");
return true;
}
//判断是否已登录
function onLine() {
if (id("btn_other_login").exists()) { }
}
//登录
function dewuLogin(userName,passWord) {
// id("btn_other_login").click();
sleep(1000);
console.log("开始尝试密码登录!");
// id("tv_password_login").findOne().click();
text("密码登录").click();
sleep(500);
console.log("勾选协议");
id("cb_privacy").findOne().click();
sleep(500);
console.log("点击用户名输入框");
id("et_username").findOne().click();
sleep(500);
if (id("del_username_btn").exists()) {
console.log("点击清除用户名按钮");
id("del_username_btn").findOne().click();
}
sleep(1000);
id("et_username").findOne().setText(userName);
sleep(500);
id("et_password").findOne().setText(passWord);
sleep(1000);
id("btn_sure").findOne().click();
sleep(1000);
}
//找私信
function findTargetMessages() {
console.log("开始找目标私信 " + target + " ...");
id("tab_service").findOne().click();
sleep(500);
click("消息中心");
sleep(500);
// let tvTitle = id("tvTitle").find();
// for (let myTvTitle of tvTitle) {
// console.log("开始遍历私信:" + myTvTitle.getText());
// if (target === (myTvTitle.getText())) {
// console.log("命中目标私信:" + myTvTitle.getText());
// console.log(myTvTitle);
// myTvTitle.click();
// return true;
// }
// }
try {
id("recyclerView").findOne().children().forEach(child => {
// console.log("---------"+child);
var child_target = child.findOne(id("tvTitle"));
// console.log("++++++++++++++++++"+child_target);
if (child_target != null) {
console.log("开始遍历私信列表,找到:" + child_target);
if (child_target.getText() === target) {
console.log("命中目标:" + child_target.getText());
child_target.parent().parent().click();
throw Error;
}
}
});
} catch (error) {
return true;
}
}
//找到最后一条私信
function findLastMessages() {
//点击最后一条推文。
var collection = id("share_trend_layout").find();
collection.get(collection.size() - 1).click();
//模糊关键字能找到
// var a = textContains("王").findOne();
// console.log("··························· "+a);
// var b = a.parent();
// console.log("··························· "+b);
// b.click();
//精确关键字能找到
// var a = text("帅到爆炸,有没有?").findOne();
// console.log("··························· "+a);
// var b = a.parent();
// console.log("··························· "+b);
// b.click();
}
//不清楚页面有哪些控件时,可以用这个方法打印一下。
function findAllContent() {
// 第一步; 编写打印所有控件的递归方法
function queryList(json) {
for (var i = 0; i < json.length; i++) {
var sonList = json[i];
if (sonList.childCount() == 0) {
console.log("======================== " + json[i]);
} else {
queryList(sonList);
}
}
}
// 第二部查找所有控件
let rooot2 = find();
// 第三步 调用递归方法
queryList(rooot2);
}
//检查看推文时是否出现了loading。
function checkLoding() {
if (id("pwLoading").exists()) {
console.error("被安全检测了,程序3秒后将自动返回上一个界面!");
sleep(3000);
id("ivBack").findOne().click();
console.warn("请手动点击联系人头像,进行图片安全检测。");
return true;
} else {
return false;
}
}
//结束,退出登录
function backAndLogout() {
console.log("1、返回");
id("ivBack").findOne().click();
sleep(500);
console.log("2、返回");
className("android.widget.ImageButton").findOne().click();
sleep(500);
console.log("3、返回");
id("backBtn").findOne().click();
sleep(500);
console.log("4、点击我的");
id("tab_user").findOne().click();
sleep(500);
console.log("5、点击设置");
id("btn_setting").findOne().click();
sleep(500);
console.log("6、点击登出");
id("rl_sign_out").findOne().click();
sleep(500);
console.log("7、点击确认登出");
id("md_buttonDefaultPositive").findOne().click();
sleep(1000);
if (id("tv_go_login").exists()) {
console.log("退出登录成功了!");
id("tv_go_login").findOne().click();
if (id("btn_other_login").exists()) {
id("btn_other_login").findOne().click();
}
}
}
结语:
贴下某Q群的教程pdf
链接: https://pan.baidu.com/s/1-9E3wm3yRadhy47CPKOmlQ?pwd=1234
提取码: 1234
评论区