为了账号安全,请及时绑定邮箱和手机立即绑定

【备战春招】第21天UiSelector混合定位方式

标签:
爬虫
模块名
描述
课程名称
移动端Python爬虫实战 数据抓取+数据可视化
课程章节
短视频App视频内容爬取
打卡知识进程
知识进程:21 / 21
1.node.js初体验windows
2.commonjs-回顾ES6模块化
3.commonjs的语法介绍
4.commonjs和ES6 Module的区别
5.Bug分类
6.node.js和前端js的区别
7.左关联
8.聚合函数
9.【案例】统计上班时间
10.数据库的索引
11.索引的分类
12.查询数学成绩比语文成绩高的学生
13.查询平均成绩大于80分的学生
14.学生总成绩排序
15.学过体育课学生的年龄
16.查询学号大年龄小的学生
17.整体回顾
18.通过mitmproxy解析短视频App返回数据-接口分析
19.app无法抓包探秘-1
20.UiSelector resourceId定位方式
21.UiSelector混合定位方式-1
21.UiSelector混合定位方式-2
主讲老师
大壮老师
学习开始时间
2023.02.26 09:00
学习结束时间
2023.02.26 09:47
总计时
47 min
课程收获/主要内容/编程目标
怎么抓数据(重要)
学习感受/感想/领悟(心得)

明智的行动:
每天有一个自己的待办清单
给自己一个最后的期限
对自己说现在就做
改掉坏习惯,培养好习惯。
习惯,运气,机运,都是日常行为的结果。

UiSelector混合定位方式:

有时候使用单一的UiSelector定位方式可能无法准确地找到所需的UI元素。这时可以使用混合定位方式,即将多个定位方式组合在一起使用,以增加定位准确性。

下面的Python代码使用了uiautomator2库来实现Android设备的UI自动化,
具体功能为打开Android设备上的设置应用,并使用不同的UiSelector定位方式找到蓝牙设置项,并进行点击操作。
代码示例:

import uiautomator2 as u2

d = u2.connect_usb("N950")
d.app_start(package_name="com.android.settings")
d(className="android.widget.TextView")[4].click()
d(className="android.widget.TextView", instance=4).click()
d(classNameMatches="android\.widget\.\w{8}", text="蓝牙").click()
# 这里是链式定位方式
d(className="android.widget.ListView").child(text="蓝牙").click()
d(className="android.widget.ListView").child_by_text("蓝牙", resourceId="android:id/title").click()
# 完全的链式定位方法,代码非常的冗长,我们是不建议的
d(className="android.widget.ListView").child(resourceId="oppo:id/oppo_preference")[2].child(className="android.widget.RelativeLayout").child(resourceId="android:id/title").click()
# 这种方法多次依据,也不建议
d(resourceId="oppo:id/oppo_preference").sibling(resourceId="oppo:id/oppo_preference", instance=2).click()

代码解读如下:

import uiautomator2 as u2导入uiautomator2库。

d = u2.connect_usb("N950")连接USB设备,并返回Device对象。wifi

d.app_start(package_name="com.android.settings")启动设置应用。

d(className="android.widget.TextView")[4].click()使用索引值为4的TextView元素进行点击操作。className用于匹配UI元素的类名,[4]表示选择第5个匹配的UI元素。

d(className="android.widget.TextView", instance=4).click()使用实例属性来选择第5个匹配的TextView元素,并进行点击操作。

d(classNameMatches="android\.widget\.\w{8}", text="蓝牙").click()使用正则表达式匹配类名,选择文本内容为"蓝牙"的UI元素,并进行点击操作。

d(className="android.widget.ListView").child(text="蓝牙").click()使用链式定位方式,先通过类名选择ListView元素,然后选择其中的文本内容为"蓝牙"的子元素,并进行点击操作。

d(className="android.widget.ListView").child_by_text("蓝牙", resourceId="android:id/title").click()同样使用链式定位方式,但是选择子元素的方法使用child_by_text(),并同时指定了子元素的资源ID,以增加定位的准确性。

d(className="android.widget.ListView").child(resourceId="oppo:id/oppo_preference")[2].child(className="android.widget.RelativeLayout").child(resourceId="android:id/title").click()完全的链式定位方法,使用了多次的child()方法,定位相对繁琐,不建议使用。

d(resourceId="oppo:id/oppo_preference").sibling(resourceId="oppo:id/oppo_preference", instance=2).click()使用sibling()方法选择与某个UI元素相邻的UI元素,并使用实例属性选择第3个匹配的UI元素,进行点击操作。

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消