https://www.oracle.com/java/technologies/downloads/#jdk19-windows
注意安装java8,不要像我一样如下图一样安装java19,新的不支持后面的uiautomatorviewer.bat运行,不然会闪退
%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
打开 cmd 命令行工具,输入 java -version,返回信息如图所示表示安装配置成功
http://tools.android-studio.org/index.php/sdk
按提示进行安装,注意文件包的安装路径,如果C盘空间不够的话,后面可能会下载 packages 不成功,所以最好放到其他盘,如图我的安装:
安装完成后打开后
先点击选中左侧的每个 packages 包,然后点击右侧的 Accept License,依次分别点选并接受,等全部 Packages 包都变成绿色对号以后,再点击 Install 进行安装;
注意:包很大,20多G,尽量用wifi,由于这些东西是在Google的服务器上下载的,可能会因网速下载失败,会跳出报错log,不过不影响下载进度,可以等待其他组件下载完成后再重新多下载几次那几个下载失败的
等待全部安装完毕即可
1、中科院开源协会镜像站地址:
IPV4/IPV6 : http://mirrors.opencas.ac.cn 端口:80
2、北京化工大学镜像服务器地址:
IPv4: http://ubuntu.buct.edu.cn/ 端口:80
IPv4: http://ubuntu.buct.cn/ 端口:80
IPv6: http://ubuntu.buct6.edu.cn/ 端口:80
3、大连东软信息学院镜像服务器地址:
http://mirrors.neusoft.edu.cn 端口:80
举一个例子,比如使用第三个大连东软的镜像地址,使用方法如下:
接着点击close,关闭对话框,再重新启动SDK Manager应该就会开始安装了。
但是我的在下载android-R时一直报错,换下载地址也不行,但是应该不影响配置,可以先略过吧
注意:之所以要配置 UIAutomator,是因为 Android SDK tools 包中原生的工具在获取元素时,不能很好地满足开发需求;
下载链接: https://pan.baidu.com/s/1BxcMt0bpbx8agH2ZNRAeYA
提取码:i8n6
在 \sdk\tools\lib* 目录下找到 uiautomatorviewer.jar,复制该文件的文件名,将改文件移动到其他文件夹,将下载的 uiautomatorviewer.jar 复制进文件包替换原来的文件。
在 android-sdk\platform-tools 目录下找到 adb.exe,改名为adb_bak.exe
在夜神模拟器安装目录的 bin 目录下找到 nox_adb.exe 文件,复制到 android-sdk\platform-tools 目录下,重命名为 adb.exe
adb devices # 查看 adb 已连接的设备
adb kill-server # 关闭 adb 服务
adb start-server # 启动 adb 服务
在系统环境变量添加 ANDROID_HOME,路径为 SDK 文件安装路径
在 Path 中添加如下
%ANDROID_HOME%\tools
%ANDROID_HOME%\platform-tools
下载地址:https://github.com/appium/appium-desktop/releases
下载很慢,慢慢等待吧!
默认的安装路径是在C:\Program Files\Appium Server GUI
然后点击桌面图标启动如下图:
如下图所示表示安装成功:
在Appium1.22.2中版本服务和元素查看器分家了,查看元素信息就必须下载Appium Inspector
1、点击InspectorMoved按钮会自动跳转到该网页:
https://github.com/appium/appium-inspector
2、点击Releases。
3、进入页面点击如下图下载
下载很慢,慢慢等待吧!
安装后打开
4、安装Appium-Python-Client
cmd窗口输入:
pip install Appium-Python-Client
from appium.webdriver.webdriver import WebDriver
1、夜神模拟器打开USB调试
进入设置打开(没显示开发者选项的去版本里连续点击)
2、打开adb链接模拟器
执行如下命令:
adb connect 127.0.0.1:62001
adb devices
3、配置 app desired_caps
获取 apk 包名(appPackage)、活动名(appActivity)等(这里我打开的是小红书)
adb shell dumpsys activity activities
– 得到下面的返回结果,appActivity 值为 com.xingin.xhs.index.v2.IndexActivityV2,app 的 appPackage 值为 com.xingin.xhs;
– 这里注意:appActivity 返回值本来是 com.xingin.xhs/.index.v2.IndexActivityV2,需要 去掉中间的反斜线!
打开模拟器,依次进入 设置 > 关于平板电脑,获取模拟器参数参数;
# 定义启动设备需要的参数
desired_caps = {}
# 设备系统
desired_caps['platformName'] = 'Android'
# 设备系统版本号
desired_caps['platformVersion'] = '5.1.1'
# 设备名称
desired_caps['deviceName'] = 'Meizu'
## 要测试的应用的地址
#desired_caps['app'] = 'xxx.apk' # 注意是 apk 文件在电脑上的绝对路径
# 应用的包名
desired_caps['appPackage'] = 'com.xingin.xhs'
desired_caps['appActivity'] = 'com.xingin.xhs.index.v2.IndexActivityV2' # appActivity 值需要去掉反斜线
4、UIAutomator 获取元素位置
在 sdk\tools\bin 目录下找到 uiautomatorviewer.bat 文件,双击打开运行 uiautomatorviewer
启动 uiautomatorviewer 后,点击左上安卓角手机图标连接安卓模拟器
注意:每次操作 App 出现页面变换以后,如果出现下图报错,需要手动点击左上角安卓手机图标,才能够在 UIAutomator 同步页面;
将模拟器页面同步到 UIAutomator 之后,在模拟器打开 app ,再次点击左上角安卓手机图标,就可以在 UIAutomator 看到同步后的小红书 app 页面
注意:如果出现如下报错,那就重新连接下
既然这样,那就不用官方的了,换第三方的(当然了,如果要爬的app没毛病用官方的也没问题):
网上也有办法,下载新的tool工具,替换本地的tool
step1 下载新的tools,http://www.android-studio.org/
step2、解压后替换电脑里已安装Android SDK 目录里的tools目录
将原来的tools改个名字,不用删除,相当于备份,影响点就是根目录下的SDK Manager.exe暂时无法打开,点击以后黑屏一闪而过;然后将上面下载的sdk tools 解压复制到Android sdk根目录下
自行测试
4.1 这里用官方的爬京东的试试
此处展示 启动、输入关键字查询 两个动作的代码,请读者自行编写代码完成 app 操作
编写代码:
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
import time
class Jingdong():
def __init__(self):
desired_caps = {}
# 设备系统
desired_caps['platformName'] = 'Android'
# 设备系统版本号
desired_caps['platformVersion'] = '5.1.1'
# 设备名称
desired_caps['deviceName'] = '127.0.0.1:62001'
## 要测试的应用的地址
#desired_caps['app'] = 'xxx.apk' # 注意是 apk 文件在电脑上的绝对路径
# 应用的包名
desired_caps['appPackage'] = 'com.jingdong.app.mall'
desired_caps['appActivity'] = 'com.jingdong.app.mall.main.MainActivity'
self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) # 地址为appium地址
time.sleep(8)
def search(self, keyword):
self.driver.find_element_by_xpath('//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.support.v7.widget.RecyclerView[1]/android.widget.RelativeLayout[2]/android.widget.LinearLayout[1]').click()
time.sleep(3)
self.driver.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[2]/android.widget.EditText[1]").send_keys(keyword)
time.sleep(3)
self.driver.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.TextView[1]").click()
time.sleep(3)
def main():
jingdong = Jingdong()
keyword = "手机"
jingdong.search(keyword)
if __name__ == '__main__':
main()
关闭adb服务
adb kill-server
4.2 这里用第三方的 UiAutoMator2+web-editor
https://github.com/alibaba/web-editor
4.2.1 UiAutoMator2简介
UIAutomator2是⼀种Android UI⾃动化框架,该框架优点:
1.环境搭建便捷
2.UI控件识别可视化好
3.UI⾃动化编写采⽤python,学习成本低
4.UI⾃动化脚本运⾏稳定
缺点:
存在设备兼容性问题,如:
华为⼿机,⽆法通过IP离线执⾏UI⾃动化
三星S8⼿机微信webview⻚⾯⽆法识别元素
安装:pip install uiautomator2
4.2.2、web-editor简介
web-editor 类似于appium中的inspector;其功能也是⽤于元素定位调试
2、安装
pip install weditor
如果安装报错,那就制定版本安装:pip install weditor==0.6.4
下载安装比较慢,可以自己指定源安装
如果实在想安装最新版本的,那就用这个命令从github下载安装:
git clone https://github.com/openatx/weditor pip3 install -e weditor
如果想安装最新的不报错,那就去github下载,然后修改报错的文件:
.eggs\pbr-5.11.0-py3.9.egg\pbr\packaging.py
打开,找到open方法,修改代码,添加encoding=‘utf-8’,
如: with open(, ‘r’, encoding=‘utf-8’)
保存,
重新执行本地安装
3、启动
安装好之后,在终端直接输⼊ weditor 即可在默认浏览器中启动⼀个元素定位的调试界⾯,输入你的设备编码,点击Connect连接设备, Dump Hierarchy刷新同步设备界面
如果页面提示python -m weditor,关闭终端重新打开输入提示命令运行即可
4、UiAutoMator2 + Web-editor 自动化使用
import uiautomator2 as u2
d = u2.connect()
4.2 启动app
d.app_start("想要启动app的包名")
4.3 选中想要操作的元素,右侧即可看见XPath路径,底部的代码也可以直接复制使用。同时也可以跟appium一样使用className、resourceId、text等定位方式。详细方式可以查看:https://developer.android.com/reference/android/support/test/uiautomator/UiSelector
我用的模拟器,好像识别的有问题,估计用真机可以