六 网站建设方案.,影视网站源码下载,财务公司是做什么的,私密浏览器看片大全免费直播一、前言 uiautomator2是Python对Android设备进行UI自动化的库#xff0c;支持USB和WIFI链接#xff0c;可以实现获取屏幕上任意一个APP的任意一个控件属性#xff0c;并对其进行任意操作。
重点是它可以实现安卓自动化采集#xff0c;甚至是群控采集#xff0c;且安装和…一、前言 uiautomator2是Python对Android设备进行UI自动化的库支持USB和WIFI链接可以实现获取屏幕上任意一个APP的任意一个控件属性并对其进行任意操作。
重点是它可以实现安卓自动化采集甚至是群控采集且安装和操作十分简单学习成本极低。当你遇上app接口加密短期内无法逆向时不妨试试这种方式。
二、安装 1. 安装 uiautomator2 pip install uiautomator2 -i https://pypi.tuna.tsinghua.edu.cn/simple/ 2.安装 atx-agent python -m uiautomator2 init 此步骤完成之后手机上会有一个ATX的图标 3.安装 weditor pip install weditor0.6.4 -i https://pypi.tuna.tsinghua.edu.cn/simple/
开始运行
在命令行输入python -m weditor 或者 双击桌面的图标即可运行建议还是输入命令 启动之后如下图
三、常用方法
初始化设备对象
import uiautomator2 as u2
//18803bf5 设备序列号如果只有一个设备可以不传设备序列号获取方式可以在连接好设备后再dos窗口通过
//指令 adb devices查看
d u2.connect(18803bf5)
获取设备序列号方法
adb devices 应用操作
# 打开应用部分app无法打开的情况下设置use_monkeyTrue
d.app_start(com.smile.gifmaker, use_monkeyTrue)
# 关闭应用相当于am force-stop强制停止应用
d.app_stop(com.smile.gifmaker)
# 安装应用参数为地址或url
d.app_install(http://some-domain.com/some.apk)
# 卸载应用
d.app_uninstall(com.smile.gifmaker)
# 获取应用信息
d.app_info(com.eg.android.AlipayGphone)
# 清空应用信息相当于pm clear最明显特点就是登录信息也清除掉了
d.app_clear(com.eg.android.AlipayGphone)
# 获取正在运行的应用
d.app_list_running()
# 获取应用的图标
d.app_icon(com.eg.android.AlipayGphone)
# 停止所有appexcludes存在指排除已设置的
d.app_stop_all(excludescom.eg.android.AlipayGphone)
设备信息 # 基本信息
d.info
# 获取窗口大小
d.window_size()
# 获取当前应用程序信息
d.current_app()
#获取设备序列号
d.serial
#获取WIFI IP
d.wlan_ip
#获取详细的设备信息
d.device_info
推拉文件
# 推送图片到手机tmp临时目录和更改文件访问模式
d.push(file, /data/local/tmp/, mode0o755)# 推送图片
d.push(/iamge/fafsf.jpg, /data/local/tmp/, mode0o755)
# 发送广播通知不然无法查询到图片shell命令最后跟上图片在手机端地址
d.shell(am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file:///data/local/tmp//fafsf.jpg)# 拉取文件到指定位置
d.pull(/sdcard/tmp.txt, tmp.txt)
键盘操作
d.press(home) # 点击home键
d.press(back) # 点击back键
d.press(left) # 点击左键
d.press(right) # 点击右键
d.press(up) # 点击上键
d.press(down) # 点击下键
d.press(center) # 点击选中
d.press(menu) # 点击menu按键
d.press(search) # 点击搜索按键
d.press(enter) # 点击enter键
d.press(delete) # 点击删除按键
d.press(recent) # 点击近期活动按键
d.press(volume_up) # 音量
d.press(volume_down) # 音量-
d.press(volume_mute) # 静音
d.press(camera) # 相机
d.press(power) #电源键
# press失效时可使用send_action执行键盘事件
d.send_action(home)
屏幕相关 d.screen_on() # 打开屏幕
d.screen_off() 关闭屏幕
d.info.get(screenOn) # 需要 Android 4.4
d.unlock() # 解锁屏幕
d.open_notification() #下拉打开通知栏
d.open_quick_settings() #下拉打开快速设置栏
d.dump_hierarchy() # 获取屏幕ui结构
文本输入法操作 # 获取资源ID是**的文本信息
d(resourceIdcom.smile.gifmaker:id/tv_city).get_text()
# #设置文本
d(resourceIdcom.smile.gifmaker:id/tv_city).set_text(My text...)
#清除文本
d(resourceIdcom.smile.gifmaker:id/tv_city).clear_text()
# 切换成FastInputIME输入法
d.set_fastinput_ime(True)
# adb广播输入
d.send_keys(uiautomator2练习)
# 切换成正常的输入法
d.set_fastinput_ime(False)
设备交互
# 单击屏幕
d.click(x,y) # x,y为点击坐标
# 双击屏幕
d.double_click(x,y)
d.double_click(x,y,0.1) # 默认两个单击之间间隔时间为0.1秒
# 长按
d.long_click(x,y)
d.long_click(x,y,0.5) # 长按0.5秒默认
# 滑动
d.swipe(sx, sy, ex, ey)
d.swipe(sx, sy, ex, ey, 0.5) #滑动0.5s(default)
# 拖动
d.drag(sx, sy, ex, ey)
d.drag(sx, sy, ex, ey, 0.5)#拖动0.5s(default)
# 滑动点 多用于九宫格解锁提前获取到每个点的相对坐标这里支持百分比
# 从点(x0, y0)滑到点(x1, y1)再滑到点(x2, y2)
# 两点之间的滑动速度是0.2秒
d.swipe((x0, y0), (x1, y1), (x2, y2), 0.2)
# 注意单击滑动拖动操作支持百分比位置值。例
d.long_click(0.5, 0.5) 表示长按屏幕中心
截图操作 # 截图并保存到电脑上的一个文件中
d.screenshot(home.jpg)# 得到PIL.Image格式的图像. 但你必须先安装pillow
image d.screenshot()
image.save(home.jpg)# 得到OpenCV的格式图像。当然你需要numpy和cv2安装第一个
import cv2
image d.screenshot(formatopencv)
cv2.imwrite(home.jpg, image)# 获取原始JPEG数据
imagebin d.screenshot(formatraw)
open(some.jpg, wb).write(imagebin)
定位点击操作
# text定位单击
d(textSettings).click()
# text和className同时定位点击
d(textSettings, classNameandroid.widget.TextView).click()
# resourceId定位单击
d(resourceIdcom.ruguoapp.jike:id/tv_title, classNameandroid.widget.TextView).click()
# description定位单击
d(description设置).click()
# description和className同时定位单击
d(description设置, classNameandroid.widget.TextView).click()
# className定位单击
d(classNameandroid.widget.TextView).click()
# xpath定位单击
d.xpath(//android.widget.FrameLayout[index0]/android.widget.LinearLayout[index0]).click()
# 坐标单击
d.click(182, 1264)
# 等待元素出现(最多10秒出现后单击
d(textSettings).click(timeout10)
# 十秒内存在即点击存在返回True不存在返回False
d(textSkip).click_exists(timeout10.0)
# 单击直到元素消失返回布尔maxretry默认值10,interval默认值1.0
d(textSkip).click_gone(maxretry10, interval1.0)
# 点击基准位置偏移click使用时默认点击中心位置使用时尽量设置随机偏移
d(textSettings).click(offset(0.5, 0.5))
# 执行双击UI对象
d(text设置).double_click()
# 两次单击之间的默认持续时间为0.1秒
d.double_click(x, y, 0.1) # 长按特定UI对象的中心
d(textSettings).long_click()
# 长按坐标位置0.5s默认
d.long_click(x, y, 0.5)
# 在0.5秒内将UI对象拖到屏幕点(x, y)
d(textSettings).drag_to(x, y, duration0.5)
# 将UI对象拖到另一个UI对象的中心位置时间为0.25秒
d(textSettings).drag_to(textClock, duration0.25)
其他常见方法 # 等待10s
d.xpath(//android.widget.TextView).wait(10.0)
# 4秒内检查是否存在
d(resourceIdcom.smile.gifmaker:id/tv_address).exists(timeout4)# 获取所有文本的视图文本属性和中心点
for elem in d.xpath(//android.widget.TextView).all():print(Text:, elem.text)print(Attrib:, elem.attrib)print(Position:, elem.center())# print(text:, ele.elem.get(text))# 获取所有文本子类的文本信息ID等
for ele in d.xpath(//android.widget.TextView).all():for child in ele.elem.getchildren():print(child.get(text))print(child, child.get(resource-id))# xpath常见用法
# 所有元素
//*
# resource-id包含login字符
//*[contains(resource-id, login)]
# 按钮包含账号或帐号
//android.widget.Button[contains(text, 账号) or contains(text, 帐号)]
# 所有ImageView中的第二个
(//android.widget.ImageView)[2]
# 所有ImageView中的最后一个
(//android.widget.ImageView)[last()]
# className包含ImageView
//*[contains(name(), ImageView)]
四、注意事项
1、使用u2时手机需要处于开发者模式下且打开usb调试。
2、atx-agent服务提示关闭后可能需要手动启动。启动方式如下
# 进入指定设备的shell下
adb -s ***** shell
# 赋予权限
chmod 775 /data/local/tmp/atx-agent
# 启动atx-agent -d后台启动
/data/local/tmp/atx-agent server -d
3、最后附上atx-agent的项目地址有兴趣的可以看看 https://github.com/openatx/atx-agent