UiAutomator2+weditor+python获取页⾯(android)⽂本数据终极⽬标:获取抖⾳直播时评论数据。
准备⼯作:
timeout解决方法1. android⼿机或模拟器(⽆需root)
2. python环境
开始:
1.设备连接
android⼿机打开开发者模式,USB连接电脑,允许USB调试。
命令⾏输⼊adb devices查看设备,AWMCUT1224008813为设备序列号待会要⽤
>adb devices
List of devices attached
AWMCUT1224008813 device
2.安装UiAutomator2
确保python环境没有问题,我这⾥使⽤的python3
命令⾏运⾏pip3 install -U uiautomator2 安装UiAutomator2
3.安装httprpc服务
运⾏python -m uiautomator2 init安装包含httprpc服务的apk到⼿机
上述初始化命令会⾃动安装本库所需要的设备端程序:uiautomator-server、atx-agent、openstf/minicap、openstf/minitouch,并且在被测⼿机终端上会安装⼀个名为ATX的代理程序
4.安装weditor
运⾏pip3 install --pre -U weditor安装weditor在线元素查看器,weditor --help查看是否安装成功
5. 使⽤weditor查看界⾯元素
命令⾏执⾏ weditor 会⾃动打开浏览器(localhost:17310/),输⼊设备的ip或者序列号,点击Connect,打开实时开关。
此时打开app,可以在右侧Hierarchy查看界⾯元素树
d = u2.connect('AWMCUT1224008813') 对应连接设备的序列号,
#coding=utf8
import uiautomator2 as u2
import time
import logging
statakeep命令import re
import json
from string import Template
d = u2.connect('AWMCUT1224008813')
d.click_post_delay = 1.5#
logging.basicConfig(level = logging.INFO,format = '%(asctime)s - %(name)s - %(funcName)s - %(message)s')抖音python入门教程
logger = Logger(__name__)
logger.info(d)
def run_app():
d.app_start("com.ss.android.ugc.aweme")#打开程序
if d.session("com.ss.android.ugc.aweme", attach=True):#判断程序是否打开
logger.info("已打开程序")
if d(text="更多直播").exists(timeout=5):#exists:等待元素出现
logger.info("当前是打开状态״̬")
print("size:", d.xpath('//*[@resource-id="com.ss.android.ugc.aweme:id/fvw"]/android.widget.RelativeLayout').all())
for index,elem in enumerate(d.xpath('//*[@resource-id="com.ss.android.ugc.aweme:id/fvw"]/android.widget.RelativeLayout').all()): print("%s" %(index+1))
i = index + 1
s = f"//android.widget.RelativeLayout[{i}]/android.widget.TextView"
print(s)
print("item:", d.xpath(s).text)
else:
logger.info("未到指定⽂本״̬")
else:
巴沙鱼的做法print('app打开错误')
while True:
etcher官方下载print('------获取当前屏幕评论数据------')
run_app()
time.sleep(10)
部分log如下:
分类: 美⾷探店
1
//android.widget.RelativeLayout[1]/android.widget.TextView
item: 说点什么...
2
//android.widget.RelativeLayout[2]/android.widget.TextView
item: $ 楠楠楠:店铺
下载随机数表3
//android.widget.RelativeLayout[3]/android.widget.TextView
item: $ 锁锁美:4号代⾦券限菜品吗使⽤吗?
4
/
/android.widget.RelativeLayout[4]/android.widget.TextView
item: $ ⼩熙:怎么适应
5
//android.widget.RelativeLayout[5]/android.widget.TextView
item: $ ⼩熙:怎么使⽤
6
//android.widget.RelativeLayout[6]/android.widget.TextView
item: 耶啵啵:那为什么显⽰⽣菜⼀份 两⼈需要再付⼀份?
7
//android.widget.RelativeLayout[7]/android.widget.TextView
item: Joker男⼠理发馆Jimmy 来了
[Finished 9.701s]
这段脚本执⾏后会根据包名⾃动打开抖⾳,在直播页⾯通过d.xpath('//*[@resource-id="com.ss.android.ugc.aweme:id/fvw"]')获取评论列表的recyclerview,再通过遍历recyclerview下的RelativeLayout打印出RelativeLayout下的TextView中内容。当然也可以直接遍历TextView的id(text)来进⾏获取,注意:不同设备的ViewGroup的id也就是TextView的⽗view的id可能会不同。
对列表元素的遍历是从1开始的。
另外,此时仅获取到当前屏幕上的数据,这⾥加个定时器(每10秒)不断的进⾏获取并保存,再对数据去重。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论