Android自动化AirScript

官网:http://airscript.cn/

一个基于Python编程、面向Android、Windows、iPhone等端的自动化脚本执行工具,可以使用在线Web页面进行调试开发,进阶地可以使用Pycharm或VSCode进行复杂脚本开发。拥有完善的py标准库和airscript动作库,可以嵌入js、java等语言进行开发,支持yolo图像训练融合,支持在线检索页面结构生成代码,支持项目脚本多端同步等功能。

一、运行环境

  1. 安装Python

    python官网:https://www.python.org/downloads/

    建议下载 3.8.10版本

  2. 安装PyCharm

    pycharm官网:https://www.jetbrains.com/pycharm/download/

    建议下载最新的社区版本

  3. 安装AirScript插件

    插件分享:https://pan.baidu.com/s/1UGM6ucM_Wn7X4RiAQm7q9g?pwd=pggv

    插件安装:打开pycharm,左上角进设置,点插件,从本地磁盘安装,选择zip文件(不要解压)

  4. 手机安装执行器APP

    下载地址:http://airscript.cn/

    手机进入点击下载。或电脑打开,手机扫码下载。

    下载完成后,进入APP,授予无障碍权限,其他权限确认允许。

二、新建项目

安装好插件后重启pycharm,左上角文件-AirScript-新建项目,按表单填写

三、设备连接

新窗口打开刚才新建的项目,左上角文件-AirScript-设备管理-添加设备

设备名称随意,设备地址在手机APP-开发者,设备端口默认9096

四、运行demo

需要保证手机和电脑网络处在同于局域网

  1. 可以pycharm运行

  2. 也可以网页,电脑浏览器打开,IP:端口,在IDEA中编辑运行

  3. 代码确定后,在手机端点击项目执行

  4. 附demo

python 复制代码
import time
from airscript.action import touch
# 启动
from airscript.node import Selector
from airscript.system import Media
from airscript.system import R
# 开始吧
from airscript.ui.dialog import toast
 
 
# class listener:
#     def prepare(self,player):
#         # 获取音频时长
#         dur = player.getDuration()
#         # 带监听器,我们需要调用start方法
#         player.start()
#     def completion(self):
#         print('播放完毕')
 
# Media.play(R(__file__).res('/media/letsgo.mp3'),listener())
 
time.sleep(1)
def open_viewer_list(open_num):
    # 观众列表
    while not Selector().id('com.tencent.qqmusic:id/mlive_top_guest_num').visible(True).find():
        pass
    Selector().id('com.tencent.qqmusic:id/mlive_top_guest_num').click().find()
    # 真爱粉丝
    while not Selector().text('真爱粉丝').depth(12).visible(True).find():
        pass
    Selector().text('真爱粉丝').depth(12).click().find()
    time.sleep(1)
    if open_num > 5:
        # 加载榜单 - 日榜
        toast('加载全部粉丝中', 500)
        n = 6
        while n:
            while not Selector().id('js_scroll_container').type('View').visible(True).find():
                pass
            Selector().id('js_scroll_container').type('View').click().slide(10).find()
            n -= 1
        Selector().id('js_scroll_container').type('View').click().slide(-100).find()
        toast('加载完成', 1000)
 
 
def slip_viewer_list(cnt):
    while cnt > 0:
        touch.down(640, 1930)
        touch.move(640, 1749, 200)
        touch.up(640, 1749)
        time.sleep(0.1)
        cnt -= 1
 
# # 启动APP
# Intent.run('com.tencent.qqmusic')
# time.sleep(2)
# 位置判断
if not Selector().id('com.tencent.qqmusic:id/jy_').visible(True).find() and not Selector().id(
        'com.tencent.qqmusic:id/mlive_view_pager').visible(True).find():
    toast('先回到首页', 2000)
    # # 进直播TAB
    # while not Selector().id('com.tencent.qqmusic:id/jy_').desc('直播').visible(True).find():
    #     pass
    # Selector().id('com.tencent.qqmusic:id/jy_').desc('直播').click().find()
    # 等待选厅
if Selector().id('com.tencent.qqmusic:id/jy_').desc('直播').visible(True).find():
    toast('开始选厅', 3000)
 
time.sleep(0.5)
# 打开日榜列表
open_viewer_list(6)
# 获取头像view列表 长度
while not Selector().id('js_scroll_container').child(2).child(1).child().find():
    pass
fav_selector_len = 0
if Selector().id('js_scroll_container').child(2).child(1).child().find_all()[0].childCount>0:
    fav_selector_len = len(Selector().id('js_scroll_container').child(2).child(1).child().find_all())
# 私信个数
do_work_cnt = 0
while do_work_cnt < fav_selector_len:
    time.sleep(1)
    # 点击头像
    Selector().id('js_scroll_container').child(2).child(1).child().find_all()[do_work_cnt].child(2).click()
    # 点击私信
    while not Selector().id('com.tencent.qqmusic:id/mlive_info_card_neutral_layout').find():
        pass
    Selector().id('com.tencent.qqmusic:id/mlive_info_card_neutral_layout').click().find()
 
    # 输入
    while not Selector().id('com.tencent.qqmusic:id/dsy').desc('消息').find():
        pass
    time.sleep(1)
    Selector().id('com.tencent.qqmusic:id/dsy').desc('消息').input('xxxx').find()
    # 发送
    while not Selector().id('com.tencent.qqmusic:id/dub').text('发送').find():
        pass
    Selector().id('com.tencent.qqmusic:id/dub').text('发送').click().find()
    toast(
        f'已发{str(do_work_cnt + 1)}/{str(fav_selector_len)}->' + Selector().id('com.tencent.qqmusic:id/dv0').type(
            'TextView').find().text, 1000)
    time.sleep(1)
    # 返回语音厅next
    Selector().id('com.tencent.qqmusic:id/dt4').depth(5).click().find()
    open_viewer_list(do_work_cnt + 1)
    slip_viewer_list(do_work_cnt - 3)
    do_work_cnt += 1
相关推荐
橙子199110161 小时前
Kotlin 中的 Object
android·开发语言·kotlin
layman05282 小时前
openEuler 虚拟机中 Shell 脚本实现自动化备份与清理实践
数据库·oracle·自动化
AD钙奶-lalala5 小时前
android:foregroundServiceType详解
android
代码写到35岁7 小时前
Jenkins自动发布C# EXE执行程序
运维·c#·jenkins
大胃粥8 小时前
Android V app 冷启动(13) 焦点窗口更新
android
钢琴上的汽车软件9 小时前
ARXML可视化转换工具使用说明
自动化·二次开发·可视化·转换·arxml
苹果醋311 小时前
AI大模型竞赛升温:百度发布文心大模型4.5和X1
java·运维·spring boot·mysql·nginx
程序员的世界你不懂11 小时前
Appium+python自动化(二十一)- Monkey指令操作手机
python·appium·自动化
fatiaozhang952712 小时前
中兴B860AV1.1_晨星MSO9280芯片_4G和8G闪存_TTL-BIN包刷机固件包
android·linux·adb·电视盒子·av1·魔百盒刷机
liulilittle12 小时前
OpenSSL 的 AES-NI 支持机制
linux·运维·服务器·算法·加密·openssl·解密