梦幻西游手游单开自动化挖藏宝图--4

1.简述

在pycharm中执行aritest脚本
优点:
1)不用每次启动airtest,并连接设备,进行投屏
2)airtest程序中不易对多个设备操作,扩展性较弱
当然不能把airtest软件删除,在脚本编写,对识别区域的选择,还是需要使用airtest。
多开控制系图

2.环境搭建

环境配置主要安装pycharm、安装python,并pycharm配置python,安装airtest库
使用语言:python3.6.8 开发工具:pycharm; python安装airtest

 pip install airtest

2.1.创建project

启动pycharm,在点击File-New Project
在这里插入图片描述在这里插入图片描述

2.2.导入airtest库

点击File–Setting…
在这里插入图片描述

2.3 ADB环境配置

执行脚本发现如下问题:ADB devices not found
找到airtest程序文件下\AirtestIDE\airtest\core\android\static\adb\windows中三个文件,复制到python安装路径下Scripts

在这里插入图片描述## 2.4.获取设备序列号

cmd 中执行adb devices
在这里插入图片描述
"bb6cc8c7"就是手机端序列号

2.4.代码

编写如下脚本,执行无报错,表示环境OK
在这里插入图片描述在这里插入图片描述操作:
找到airtest创建的项目存放路径
使用记事本,打开.py文件
在这里插入图片描述另外,与.py路径下的图片,也需要复制到pycharm中的脚本同级路径中。
在这里插入图片描述运行脚本,就会在“bb6cc8c7”上执行代码。实现控制手机。

3.Android设备(非远程设备)

这里说的Android设备,主要包括Android的手机、Android的平板,以及部分模拟器,模拟器只限不需要执行adb connect连接,就能获取设备ID号,例如雷电。mumu模拟器不适用,见下一章节!

3.1.连接设备

在这里插入图片描述connect_device("Android://127.0.0.1:5037/127.0.0.1:7555
模拟器端口是7555,127.0.0.1:5037是对应的本机的adbhost和adbport

模拟器端口在启动模拟器的帮助文档中查看,不同模拟器端口是不一样的。
同一模拟器多开时,端口名称也不一样。

夜神安卓模拟器 62001
逍遥模拟器 21503
蓝叠模拟器 5555
雷电 5555
天天 5037
mumu 7555
Genymotion 5555
腾讯手游助手 adb connect 127.0.0.1:5555

先连接模拟器
connect_device(“android:///”) #连接本地android设备
连接雷电模拟器两种办法:
connect_device(‘Android://127.0.0.1:5037/127.0.0.1:5555’)
雷电模拟器端口是5555,127.0.0.1:5037是对应的本机的adbhost和adbport
connect_device(‘Android://127.0.0.1:5037/emulator-5554’)
emulator-5554是连接后出现的名字,可以用adb devices看到

3.2.代码

只需将手机连接的代码。
connect_device(“Android:///bb6cc8c7”)修改为connect_device(‘Android://127.0.0.1:5037/127.0.0.1:5555’)

4.windows控制

通过对PC端游戏应用进行控制,为后续多开半自动化奠定基础。

4.1.思路

1)获取程序(游戏)的句柄
2)根据句柄,连接设备
3)根据代码对程序进行操控

4.2.获取句柄

import win32gui


def get_all_windows():
    hWnd_list=[]
    win32gui.EnumWindows(lambda hWnd, param: param.append(hWnd), hWnd_list)
    hwnds =[]
    for hwnd in hWnd_list:
        title = win32gui.GetWindowText(hwnd)
        if "梦幻" in title:
            print('窗口标题:%s' % (title),"句柄值:%d"%hwnd)
            hwnds.append(hwnd)
    return hwnds


if __name__ == '__main__':
    print(get_all_windows())

4.2.连接设备

init_device(platform="Windows",uuid="123456")#uuid为句柄值
connect_device("Windows:///123456")
set_current("123456")
接下来的代码与手机操作时一致,但要注意airtest中脚本,必须是使用windows窗口进行编写的。否则屏幕分辨率不一致,会导致无定位被查找对象!
import win32gui
from airtest.core.api import *

def get_all_windows():
    # 获取指定标题名称的句柄
    hWnd_list=[]
    win32gui.EnumWindows(lambda hWnd, param: param.append(hWnd), hWnd_list)
    hwnds =[]
    for hwnd in hWnd_list:
        title = win32gui.GetWindowText(hwnd)
        if "向日葵远程控制" in title:
            print('窗口标题:%s' % (title),"句柄值:%d"%hwnd)
            hwnds.append(hwnd)
    return hwnds
def connect_win(hwnd):
    # 初始化设备并连接
    init_device("Windows")
    connect_device(f"Windows:///{hwnd}")
    
def cangbaotu(n=0):
    # 指定启动第几个句柄
    hwnds = get_all_windows()
    connect_win(hwnds[n])
    for i in range(10):
        touch(Template(r"tpl1710235054381.png", record_pos=(-0.385, -0.026), resolution=(858, 566)))
        wait(Template(r"tpl1710235226758.png", record_pos=(-0.389, -0.029), resolution=(858, 566)), 30)

if __name__ == '__main__':
    n = 0 #表示启动第几个句柄,第1个是为0
    cangbaotu(n)

搭建框架中遇到的问题

(1)airtest adb 与python中的adb 冲突问题,

解决方案:把\tools\adb39 中的adb 拷贝到 pyhon 的\Lib\site-packages\airtest\core\android\static\adb\windows 目录下

5.思考

1.基于上面的代码,只能控制单台设备或程序,那么是否可以同时控制多台设备呢?

  • 25
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值