• app小程序手机端Python爬虫实战07UiSelector通过resourceId、层级定位方式


    作者:虚坏叔叔
    博客:https://xuhss.com

    早餐店不会开到晚上,想吃的人早就来了!😄

    UiSelector通过resourceId、层级定位方式

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-caxoHWv9-1659271020227)(C:\Users\Administrator\Desktop\1.png)]

    一、resourceId定位方式

    • resourceId 全resourceID匹配
    • resourceIdMatches 正则表达式

    1.1 实例演示

    1.1.1 全resourceID匹配

    可以看到,整个页面只有一个resourceId,并没有重复的resourceId。所以索引为0

    # 包名通过weditor获取
    d.app_start(package_name="com.tal.kaoyan")
    # 通过resourceId定位方式
    d(resourceId = "com.tal.kaoyan:id/login_code_touname")[0].click()
    
    • 1
    • 2
    • 3
    • 4

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XFVBtApo-1659271020228)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220731195405297.png)]

    1.1.2 多个条件来定位控件

    可以将text属性加进去,这样也可以不用添加索引

    # 包名通过weditor获取
    d.app_start(package_name="com.tal.kaoyan")
    # 通过多个条件进行定位
    d(resourceId = "com.tal.kaoyan:id/login_code_touname", text="密码登录").click()
    
    • 1
    • 2
    • 3
    • 4

    1.1.3 正则表达式定位控件

    # 包名通过weditor获取
    d.app_start(package_name="com.tal.kaoyan")
    # 通过多个条件进行定位
    d(resourceIdMatches = "com.tal.kaoyan:id\/login_code_touname", text="密码登录").click()
    
    • 1
    • 2
    • 3
    • 4

    注意,对"/"要进行转移操作的。

    二、混合定位方式

    2.1 层级查找控件

    我们可以先看一下页面的层级:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S4oDiXjc-1659271020229)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220731201614470.png)]

    为什么一个页面里,要嵌套这么多层数呢?因为在每个布局中,都可以单独定义它的属性,这样就能应对安卓开发中,各种界面的需求变化。

    我们可以通过加入层级的关系,更加精确的找到控件:

    # 包名通过weditor获取
    d.app_start(package_name="com.tal.kaoyan")
    # 混合定位方式
    d(className="android.widget.LinearLayout").child(text = "密码登录").click()
    
    • 1
    • 2
    • 3
    • 4

    这里就写2个层级,那如果一个控件需要多层的查找才能唯一确定,可以一直child找到对应的控件。但那样的话代码会冗长,不推荐,可以跨层级定位控件。

    2.2 跨层级定位控件

    如果我想要跨层级查找应该怎么实现呢?

    通过child_by_text,就会递归查找符合文本要求的控件。这里在查找的条件中,添加了resourceId的条件。

     # 包名通过weditor获取
    d.app_start(package_name="com.tal.kaoyan")
    # 混合定位方式
    d(className="android.widget.FrameLayout").child_by_text("密码登录", resourceId="com.tal.kaoyan:id/login_code_touname").click()
    
    • 1
    • 2
    • 3
    • 4

    2.3 兄弟节点定位

    通过sibling可以实现兄弟定位

    # 包名通过weditor获取
    d.app_start(package_name="com.tal.kaoyan")
    # 兄弟节点定位
    d(resourceId="com.tal.kaoyan:id/login_code_phonecodeview").sibling(resourceId="com.tal.kaoyan:id/login_code_touname")[0].click()
    
    • 1
    • 2
    • 3
    • 4

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IatlLGL1-1659271020230)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220731203030080.png)]

    三、总结

    • 本文介绍了Uiautomator2 UiSelector通过resourceId、层级定位方式。
    • 如果觉得文章对你有用处,记得 点赞 收藏 转发 一波哦,博主也支持为铁粉丝制作专属动态壁纸哦~

    💬 往期优质文章分享

    🚀 优质教程分享 🚀

    • 🎄如果感觉文章看完了不过瘾,可以来我的其他 专栏 看一下哦~
    • 🎄比如以下几个专栏:Python实战微信订餐小程序、Python量化交易实战、C++ QT实战类项目 和 算法学习专栏
    • 🎄可以学习更多的关于C++/Python的相关内容哦!直接点击下面颜色字体就可以跳转啦!
    学习路线指引(点击解锁)知识定位人群定位
    🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
    💛Python量化交易实战 💛入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统
    ❤️ Python&C++混合编程❤️难度偏高分享学习Python C++混合编程知识!

    🚀 资料白嫖,温馨提示 🚀

    关注下面卡片即刻获取更多编程知识,包括各种语言学习资料,上千套PPT模板和各种游戏源码素材等等资料。更多内容可自行查看哦!

    请添加图片描述

  • 相关阅读:
    前端面试题之Javascript篇
    Python爬虫:selenium动态加载HTML的常用方法【汇总笔记】
    R语言非参数PDF和CDF估计、非参数分位数回归分析间歇泉、GDP增长数据
    tomcat部署
    学习笔记-角色权限
    C指针
    Java基础入门day62
    nacos应用——占用内存过多问题解决(JVM调优初步)
    基于JAVA的股票交易管理系统-计算机毕业设计
    获取 Linux Standard Base (LSB) 版本信息
  • 原文地址:https://blog.csdn.net/huangbangqing12/article/details/126090188