安卓获取视图计算坐标和模拟点击

cooolr 于 2020-12-31 发布
package main

import "github.com/cooolr/autopy"
import "github.com/tidwall/gjson"

var http_x,http_y int

func http_switch() {
    body,err := autopy.GetView()
    if err != nil{
        return
    }
    value := gjson.Get(body,"data")
    boundsInScreen := value.Array()[1].Array()[0].Array()[1].Array()[0].Array()[1].Array()[2].Array()[0].Get("boundsInScreen")
    bottom := boundsInScreen.Get("bottom").Int()
    top := boundsInScreen.Get("top").Int()
    left := boundsInScreen.Get("left").Int()
    right := boundsInScreen.Get("right").Int()
    x := int((left+right)/2)
    y := int((bottom+top)/2)
    http_x = x
    http_y = y
    autopy.Click(x,y)
}

func click() {
    // 1. 打开HttpCanary
    autopy.ClickByText("HttpCanary")
    autopy.Sleep(5)
    // 2. HttpCanary开启抓包
    if http_x != 0 {
        autopy.Click(http_x,http_y)
    } else {
        http_switch()
    }
    autopy.Sleep(1)
    // 3. 返回后台
    autopy.HOME()
    autopy.Sleep(2)
    // 4. 打开今日头条
    autopy.ClickByText("今日头条")
    autopy.Sleep(15)
    // 5. 刷新国际频道
    autopy.ClickByText("国际")
    autopy.Sleep(1)
    autopy.ClickByText("国际")
    autopy.Sleep(15)
    autopy.ClickByText("以后再说")
    autopy.BACK()
    autopy.ClickByText("国际")
    autopy.ClickByText("国际")
    autopy.Sleep(9)
    // 6. 退出返回后台
    autopy.BACK()
    autopy.BACK()
    autopy.BACK()
    autopy.BACK()
    autopy.Sleep(5)
    // 8. 打开HttpCanary
    autopy.ClickByText("HttpCanary")
    autopy.Sleep(2)
    // 9. HttpCanary停止抓包
    autopy.Click(http_x,http_y)
    autopy.Sleep(5)
    // 10. 退出返回后台
    autopy.BACK()
    autopy.BACK()
    autopy.BACK()
    autopy.Sleep(5)
}

func main() {
    autopy.HOME()
    autopy.Sleep(3)
    for {
        click()
        autopy.Sleep(15)
    }
}