init
This commit is contained in:
commit
cc1674b255
|
|
@ -0,0 +1,3 @@
|
||||||
|
go.sum
|
||||||
|
totalcontrol-demo
|
||||||
|
*.exe
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
module myschools.me/suguo/totalcontrol-demo
|
||||||
|
|
||||||
|
go 1.19
|
||||||
|
|
||||||
|
require github.com/tidwall/gjson v1.14.4
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/tidwall/match v1.1.1 // indirect
|
||||||
|
github.com/tidwall/pretty v1.2.0 // indirect
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,72 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/tidwall/gjson"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
// 查找设备
|
||||||
|
resp, err := http.Get("http://localhost:5037/devices")
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
body, err := ioutil.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解析设备信息
|
||||||
|
serial := gjson.GetBytes(body, "devices.0.serial").String()
|
||||||
|
|
||||||
|
// 连接设备
|
||||||
|
resp, err = http.Post(fmt.Sprintf("http://localhost:5037/devices/%s/connect", serial), "", nil)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
// 获取应用程序内容页信息
|
||||||
|
resp, err = http.Post(fmt.Sprintf("http://localhost:5037/devices/%s/activities", serial), "application/json", bytes.NewBufferString(`{"package":"com.example.myapp"}`))
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
body, err = ioutil.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解析应用程序内容页信息
|
||||||
|
layout := gjson.GetBytes(body, "layout")
|
||||||
|
|
||||||
|
// 查找关闭按钮位置
|
||||||
|
var x, y int
|
||||||
|
layout.ForEach(func(key, value gjson.Result) bool {
|
||||||
|
if value.Get("class").String() == "android.widget.Button" && value.Get("text").String() == "Close" {
|
||||||
|
x = int(value.Get("bounds.0").Float())
|
||||||
|
y = int(value.Get("bounds.1").Float())
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
|
||||||
|
// 发送模拟点击指令
|
||||||
|
cmd := fmt.Sprintf("input tap %d %d", x, y)
|
||||||
|
resp, err = http.Post(fmt.Sprintf("http://localhost:5037/devices/%s/shell", serial), "application/octet-stream", bytes.NewBufferString(cmd))
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
// 等待点击操作完成
|
||||||
|
time.Sleep(time.Second)
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue