autojs之通信

简介: 通信概念两个主体, 相互之间交换信息

通信概念


两个主体, 相互之间交换信息


autojs版本



主体概念


  • 同一个脚本
  • 多个脚本
  • 脚本和app
  • 脚本和服务器


通信方法


  • 文件读写
  • 本地存储 Storages
  • emitter
  • 脚本间广播 events.broadcast
  • 脚本引擎 ScriptEngine
  • 脚本引擎 engines.execScriptFile
  • 安卓广播
  • http


文件读写

let filePath = files.join(files.getSdcardPath(), "1.txt");
files.write(filePath, "hello world");
toastLog(files.read(filePath));


本地存储 Storages

var storage = storages.create("ABC");
storage.put("a", 123);
toastLog(storage.get("a"));


emitter

// 会打印2次 hello world
const myEE = events.emitter();
myEE.on("foo", (value) => {
  toastLog(value);
});
myEE.on("foo", (value) => {
  toastLog(value);
});
console.log(myEE.eventNames());
myEE.emit("foo", "hello world");


脚本间广播 events.broadcast

// 请牢记js是单线程, 3秒过后才会打印小明
events.broadcast.on("hello", function (name) {
  toastLog("你好, " + name);
});
events.broadcast.emit("hello", "小明");
//保持脚本运行
setInterval(() => {}, 1000);
for (var i = 0; i < 3; i++) {
  sleep(1000);
  log(i);
}


脚本引擎 ScriptEngine


向该脚本引擎发送一个事件,该事件可以在该脚本引擎对应的脚本的events模块监听到并在脚本主线程执行事件处理。


例如脚本receiver.js的内容如下:

//监听say事件
events.on("say", function(words){
  toastLog(words);
});
//保持脚本运行
setInterval(()=>{}, 1000);


同一目录另一脚本可以启动他并发送该事件:

//运行脚本
var e = engines.execScriptFile("./receiver.js");
//等待脚本启动
sleep(2000);
//向该脚本发送事件
e.getEngine().emit("say", "你好");


脚本引擎 engines.execScriptFile


demo.js

var args = engines.myEngine().execArgv;
let who = args.who;
toastLog(who);


启动demo.js并且带上参数


engines.execScriptFile("demo.js", { arguments: { who: "yashu" } });


安卓广播


注册广播

let receiver = new JavaAdapter(android.content.BroadcastReceiver, {
  onReceive: function (context, intent) {
    log(intent);
    switch (intent.action) {
      case Intent.ACTION_BATTERY_CHANGED:
        log("ACTION_BATTERY_CHANGED");
        let level = intent.getIntExtra("level", 0);
        toastLog("当前电量:" + level + "%");
        break;
      case "android.intent.action.yashu":
        toastLog("牙叔自定义广播");
        let value = intent.getStringExtra("author");
        log("接收到数据 author: " + value);
        break;
    }
  },
});
context.registerReceiver(receiver, filter);


发送广播

app.sendBroadcast({
  action: action,
  extras: {
    author: "yashu",
  },
});


http


get

console.show();
var r = http.get("www.baidu.com");
log("code = " + r.statusCode);
log("html = " + r.body.string());


post


一个模拟表单提交登录淘宝的例子如下:

var url = "https://login.taobao.com/member/login.jhtml";
var username = "你的用户名";
var password = "你的密码";
var res = http.post(url, {
    "TPL_username": username,
    "TPL_password": password
});
var html = res.body.string();
if(html.contains("页面跳转中")){
    toast("登录成功");
}else{
    toast("登录失败");
}






相关文章
AutoJs曲线滑动---贝塞尔曲线
AutoJs曲线滑动---贝塞尔曲线
531 0
|
6月前
|
数据采集 搜索推荐 API
淘宝商品评论API接口全解析:从数据采集到情感分析
淘宝商品评论API是淘宝开放平台提供的数据服务,支持开发者获取商品的用户评论、评分、时间、多媒体信息等。接口具备筛选、分页和排序功能,适用于产品优化与市场分析。文章还附有Python调用示例,演示如何请求和解析评论数据。
|
数据采集 NoSQL 调度
flask celery python 每月定时任务
flask celery python 每月定时任务
|
SQL 关系型数据库 数据库
在 PostgreSQL 中使用 LIKE
【8月更文挑战第12天】
2106 1
|
SQL 缓存 关系型数据库
MySQL常见问题解决和自动化安装脚本
这篇内容包含了两个主要部分:解决MySQL登录问题和处理GPG密钥问题。当MySQL密码正确但无法登录时,可以通过执行SQL命令`ALTER USER`和`flush privileges`来修改和重置密码。对于MySQL安装时的GPG密钥错误,首先需要强制删除旧的MySQL仓库包,导入新的GPG公钥,然后安装MySQL服务器。如果遇到GPG检查错误,可以使用`--nogpgcheck`参数忽略检查来安装。最后,提供了一个自动化安装MySQL的脚本,用于检查旧版本、卸载残留、安装MySQL8并启动服务。
1319 1
MySQL常见问题解决和自动化安装脚本
|
图形学
【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏5(附项目源码)
【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏5(附项目源码)
233 2
【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏5(附项目源码)
springboot全局自定义异常
springboot全局自定义异常
|
Python
Python报错: No module named 'lxml'
Python报错: No module named 'lxml'
736 1
|
前端开发 JavaScript
layui服务器端分页实例
layui服务器端分页实例
249 0