Pythoner集中营

Python学习日志2:两个uiautomator性能提升技巧

2018-03-30  本文已影响356人  郭百度

最近在给自己的AGI助理写眼睛,开头用requests库,后来发现很多信息是加密的,在引入图形识别和OCR之前,为了便捷处理用了uiautomator https://github.com/xiaocong/uiautomator,发现了几个问题
开头尝试用

try:
   d('过滤条件').info
expect:
  print('未找到对应控件')

的方式来监听是否在锁屏界面,后来发现这个代码执行效率非常之低。
无意中发现使用

if d('过滤条件').count==0:
  print('未找到对应控件')

的方法,说明count比info效率更高。

另一个性能问题是官方文档带来的:

# get the count of views with text "Add new" on current screen
d(text="Add new").count

# same as count property
len(d(text="Add new"))

# get the instance via index
d(text="Add new")[0]
d(text="Add new")[1]
...

# iterator
for view in d(text="Add new"):
    view.info  # ...

其中提到的 for view in d()的方式性能极其低下,似乎每取一个元素都耗费一次I/O,基本一个清单读取都要25-37秒的等待,在发现这个问题后,使用dump()出xml文本,进而逐行进行xml解析,一个list不到1秒就解析完成

def xmlKeyword(file,textBefore,textBehind):
    eList=''
    f=open(file)
    for line in f:
        beginNum = line.find(textBefore) + len(textBefore)
        endNum = line.find(textBehind, beginNum)
        result = line[beginNum:endNum]
        #过滤条件1,找到末尾元素endNum为-1
        if endNum == -1:
            result=''
        #过滤条件2,包含文字行过滤,等同文字行过滤
        if '包含文字过滤' in result or result=='等同文字1' or result=='相同文字2':
            result=''
            print(result)
        if result != '':
            eList=eList + result + '\n'
    f.close()
    return eList

中途还尝试了使用uiautomator2,后来由于端口调试问题,需要用到python2.7,最后放弃了这个性能更好的库。
虽然mac里自带了2.x版本的python,但由于之前写过一段时间混编,而且使用配套的视图软件会导致android SDK自带的uiautomatorViewer连接不上手机,还是更换使用uiautomator。

等工具运作起来下一阶段就是在工具的框架上替换升级模块,比如视觉部分可以从ID等升级到图形识别,手和大脑可以考虑升级自我学习,自我编辑验证脚本,能自己写自己代码的AI才是好AI。

关于进展,目前的助理已经可以帮我完成各应用市场联想词的收集,类似市面上ASO100的数据,但由于是助理定制,接下来要写分析和决策模块,目的是解放互联网运营天天盯数据分析数据带来的重复劳动枷锁。

前期还是重决策,希望快速进入决策模块编写,至少为该工具化形态写1000条以上的决策,分析提炼后进入自动化阶段,完成后再抽象思维真正进入AGI阶段。

AGI:让人类更专注

上一篇下一篇

猜你喜欢

热点阅读