自动化环境搭建
环境搭建需要下载安装不少软件,而且还有不少是国外网站下载的。
为了方便各位朋友,白月黑羽把这些软件 最新的安装包 都放在如下的百度网盘链接中了,请大家自行下载。
链接:https://pan.baidu.com/s/19C9fGmoXne8DgfXhrTB2TQ
提取码:kgwb
安装client编程库
根据原理图, 我们知道自动化程序需要调用客户端库和 Appium Server 进行通信。
因为我们介绍Python语言开发,所以当然是用pip安装,如下
pip install appium-python-client
安装Appium Server
Appium Server 是用 nodejs 运行的,基于js开发出来的。
Appium组织为了方便大家安装使用,制作了一个可执行程序 Appium Desktop,把 nodejs 运行环境、Appium Server 和一些工具 打包在里面了,只需要简单的下载安装就可以了。
可以从 上面给出的百度网盘连接 下载安装: Appium-windows-1.15.1.exe
附加信息: Appium Desktop官方下载,https://github.com/appium/appium-desktop/releases/latest
安装JDK
本教程主要讲解 安卓APP的自动化,必须要安装安卓SDK(后面会讲到),而安卓SDK需要 JDK 环境。
可以从 上面给出的百度网盘连接 下载安装: jdk-8u211-windows-x64.exe
安装好之后,还需要添加一个环境变量 JAVA_HOME ,指定 值 为 jdk安装目录,比如
JAVA_HOME d:\tools\java\jdk1.8.0_211
安装 Android SDK
对于安卓APP的自动化,Appium Server 是需要 Android SDK的。
因为要用到里面的一些工具,比如 要执行命令设置手机、传送文件、安装应用、查看手机界面等。
可以从 上面给出的百度网盘连接 下载最新的 Android SDK文件包: androidsdk.zip ,并且解压,即可。
系统环境变量,解压完成后,需要 配置一下 添加一个 环境变量 ANDROID_HOME ,设置值为sdk包解压目录,比如 d:\tools\androidsdk
另外,还推荐大家配置环境变量 PATH ,加入 adb所在目录, d:\tools\androidsdk\platform-tools
用户环境变量就可以
注意:是 添加 该目录到环境变量PATH中, !!!不是替换!!! ,否则会导致系统命令都找不到的严重后果,初学者 请对照视频讲解操作。
连接手机
上述的软件环境都准备好以后,要自动化手机APP,需要:
在你运行程序的电脑上 用 USB线 连接上 你的安卓手机
进入 手机设置 -> 关于手机 ,不断点击 版本号 菜单(7次以上),
退出到上级菜单,在开发者模式中,启动USB调试
如果手机连接USB线后,手机界面弹出 类似 如下提示。
连接好以后,打开命令行窗口, 执行 adb devices -l 命令来列出连接在电脑上的安卓设备。
如果输出 类似如下的内容:
一个例子,别着急运行,做完以下查看准备
from appium import webdriver
from appium.webdriver.extensions.android.nativekey import AndroidKey
desired_caps = {
'platformName': 'Android', # 被测手机是安卓
'platformVersion': '10', # 手机安卓版本
'deviceName': 'xxx', # 设备名,安卓手机可以随意填写
'appPackage': 'tv.danmaku.bili', # 启动APP Package名称
'appActivity': '.MainActivityV2', # 启动Activity名称
'unicodeKeyboard': True, # 使用自带输入法,输入中文时填True
'resetKeyboard': True, # 执行完程序恢复原来输入法
'noReset': True, # 不要重置App
'newCommandTimeout': 6000,
'automationName' : 'UiAutomator2'
# 'app': r'd:\apk\bili.apk',
}
# 连接Appium Server,初始化自动化环境
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
# 设置缺省等待时间
driver.implicitly_wait(5)
# 如果有`青少年保护`界面,点击`我知道了`
iknow = driver.find_elements_by_id("text3")
if iknow:
iknow.click()
# 根据id定位搜索位置框,点击
driver.find_element_by_id("expand_search").click()
# 根据id定位搜索输入框,点击
sbox = driver.find_element_by_id('search_src_text')
sbox.send_keys('白月黑羽')
# 输入回车键,确定搜索
driver.press_keycode(AndroidKey.ENTER)
# 选择(定位)所有视频标题
eles = driver.find_elements_by_id("title")
for ele in eles:
# 打印标题
print(ele.text)
input('**** Press to quit..')
driver.quit()
运行代码前,要先 运行 Appium Desktop
环境变量,是否配好,如果配好可在 Appium 中看到如下界面
查找 应用 Package 和 Activity,此也是准备工作,将代码中的替换为你查到的
没有apk
如果你应用已经安装在手机上了,可以直接打开手机上该应用,进入到你要操作的界面
# 截取手机屏幕
D:\h_fsh\computerSoftware\android\androidsdk\tools\bin\uiautomatorviewer.bat
然后执行
adb shell dumpsys activity recents | find "intent={"
会显示如下,最近的 几个 activity 信息,
# 运行代码,出现以下打印内容
鼻子:我喝饱了!?
猫:让我看看路况,开车!
车入羊口?
看一遍笑一遍
秋高气爽,爽的很~
**** Press to quit..
连点器
连接华为手机步骤
# 1. 设置 => 关于手机 => 连击版本号,进入开发者模式
# 2. 设置 => 系统与更新 => 开发人员选项 => 开启 USB 调试
# 3. 多开启关闭几次,直到弹出下面的图(不是第一次连接),点击确定
# 4. 进入 scrcpy 目录,cmd 命令,输入 adb usb
C:\Users\lenovo\Desktop\scrcpy-win64-v1.19>adb usb
restarting in USB mode
# 5. 输入 adb tcpip 5555, 可以拔掉 usb 数据线了
C:\Users\lenovo\Desktop\scrcpy-win64-v1.19>adb tcpip 5555
restarting in TCP mode port: 5555
# 6. 查看手机 ip 地址,设置 => 关于手机 => 状态信息
# 7. adb connect 手机ip:5555, 多试几次
C:\Users\lenovo\Desktop\scrcpy-win64-v1.19>adb connect 10.58.30.169:5555
already connected to 10.58.30.169:5555
# 8. 如果直接运行 scrcpy.exe 报错,需要设置参数再启动
默认的scrcpy比特率是8Mbps,这对于Wi-Fi连接来说可能太多了。根据使用情况,降低比特率和分辨率可能是一个很好的折中方案。
scrcpy --bit-rate 2M --max-size 800
# 或者简写
scrcpy -b2M -m800
# 9. 其他常用操作
- 使用命令行选项在启动时镜像时可以关闭设备屏幕,这一点也挺实用
scrcpy --turn-screen-off
scrcpy -S
- 查看已连接设备命令adb devices,显示device则表示已连接,显示offline则离线
D:\Github_Run\scrcpy-win64-v1.10>adb devices
List of devices attached
192.168.0.4:5555 device
描述 | 快捷键 |
---|---|
切换全屏模式 | Alt+f |
点击手机电源 | Alt+p |
返回 | Alt+b |
返回到HOME | Alt+h |
多任务 | Alt+s |
更多操作 | 长按鼠标左键 |
显示最佳窗口 | Alt+g |
调节音量 | Alt+上下键 |
关闭设备屏幕(保持镜像) | Alt+o |
将设备剪贴板复制到计算机 | Ctrl+c |
将计算机剪贴板粘贴到设备 | Ctrl+v |
程序
# 1. 实时获取鼠标位置
import pyautogui
# 上一次的位置
lastPos = pyautogui.position()
try:
while True:
# 新位置
newPos = pyautogui.position()
if lastPos != newPos:
print(newPos)
lastPos = newPos
except KeyboardInterrupt:
print("\nExit.")
# 2. 鼠标连续点击
import pyautogui
import time
pyautogui.moveTo(36, 25)
temp = 1
# 您可以设置 pyautogui.PAUSE 来控制动作之间的延迟持续时间.默认情况下,它设置为 0.1 sec,这就是您每秒获得最多 10 次点击的原因.
pyautogui.PAUSE = 0.0001
while True:
pyautogui.click()