zoukankan      html  css  js  c++  java
  • golang 解析XML

    用adb操控android手机时,可以解析页面控件信息(xml)

    代码如下:

    package main
    
    import (
        "encoding/xml"
        "fmt"
        "io/ioutil"
        "os"
        "os/exec"
    )
    
    func main() {
    
        AdbShellUiautomatorDump()
        DecodeXML()
    }
    
    /*
    //adb shell uiautomator dump /sdcard/ui.xml
    获取当前应用屏幕上所有控件的信息并保存在sdcard下ui.xml文件里面. sdk版本16以上
    然后可以在电脑上解析该XML,根据其中的bounds找到控件坐标点,然后tap
    可参考:
    //https://blog.csdn.net/henni_719/article/details/72953251
    //https://studygolang.com/articles/5328
    */
    func AdbShellUiautomatorDump() {
        exec.Command("adb", "shell", "uiautomator", "dump", "--compressed", "/sdcard/window_dump.xml").Run()
        exec.Command("adb", "pull", "/sdcard/window_dump.xml", ".").Run()
        exec.Command("adb", "shell", "rm", "/sdcard/window_dump.xml").Run()
    }
    
    type HierarchyItem struct {
        XMLName xml.Name   `xml:"hierarchy"`
        Node    []NodeItem `xml:"node"`
        //Description string   `xml:",innerxml"`
    }
    
    //嵌套了自身,参考:https://studygolang.com/articles/3670
    type NodeItem struct {
        XMLName     xml.Name   `xml:"node"`
        Node        []NodeItem `xml:"node"`
        Bounds      string     `xml:"bounds,attr"`
        Description string     `xml:",innerxml"`
    }
    
    func DecodeXML() {
        file, err := os.Open("window_dump.xml") // For read access.
        if err != nil {
            fmt.Printf("error: %v", err)
            return
        }
        defer file.Close()
        data, err := ioutil.ReadAll(file)
        if err != nil {
            fmt.Printf("error: %v", err)
            return
        }
        v := HierarchyItem{}
        err = xml.Unmarshal(data, &v)
        if err != nil {
            fmt.Printf("error: %v", err)
            return
        }
    
        fmt.Printf("v is: %+v", v.Node[0].Node[0].Node[0].Node[0].Node[0].Bounds)
    }
  • 相关阅读:
    01-Django 简介
    函数及函数的嵌套等
    循环及循环嵌套
    运算符
    if, elif, else及if嵌套
    变量及变量计算和引用
    Python的3种执行方式
    Jmeter设置默认中文启动
    Vysor
    python基础学习(二)
  • 原文地址:https://www.cnblogs.com/pu369/p/10460490.html
Copyright © 2011-2022 走看看