iOS手机App爬虫- (1) Mac安装Appium真机运行环境
iOS手机App爬虫
- 一、环境准备与工具安装
- 1. 开发基础环境配置
- 1.1 Node.js环境
- 1.2 Xcode套件
- 1.3 Java环境
- 2. 核心测试工具链
- 2.1 Appium主程序
- 2.2 辅助工具集
- 3. 可视化工具
- 二、设备与环境验证
- 1. 设备信息获取
- 2. 环境健康检查
- 三、WebDriverAgent编译部署
- 1. 设备端准备
- 2. 项目配置
- 3. Xcode证书配置
- 4. 编译与部署
- 四、自动化测试执行
- 1. 启动Appium服务
- 2. 配置Appium Inspector
- 3. 参数获取方法
- 4. 启动测试会话
- 五、常见问题排查
一、环境准备与工具安装
1. 开发基础环境配置
1.1 Node.js环境
# 安装NodeJs(JavaScript运行时环境,用于运行Appium服务)
nvm install 21
nvm use 21
node --version # 验证安装
npm -v # 验证包管理器
1.2 Xcode套件
- Xcode安装:从App Store下载安装(iOS应用开发必备IDE)
- Xcode Command Line Tools:终端执行安装命令
xcode-select --install
1.3 Java环境
# 安装Java(Appium部分依赖需要Java环境)
brew install java# 配置环境变量(下面内容添加至/etc/profile)
echo 'JAVA_HOME=/opt/homebrew/opt/openjdk
export JAVA_HOME' | sudo tee -a /etc/profile# 然后source一下
source /etc/profile
2. 核心测试工具链
2.1 Appium主程序
# 安装Appium(跨平台自动化测试框架)
npm install -g appium
# 查看支持的驱动列表(如下图)
appium driver list# 安装XCUITest驱动(iOS专用测试驱动)
appium driver install xcuitest
2.2 辅助工具集
# 安装WebDriver客户端库
npm install -g wd# 安装Appium Doctor(环境检测工具,它检查Appium成功运行的前提条件)
npm install -g appium-doctor# 安装Carthage(WebDriverAgent依赖管理器)
brew install carthage# 安装设备管理工具
brew install libimobiledevice # 设备通信库
brew install ideviceinstaller # 应用管理工具
brew install ios-deploy # 应用部署工具
3. 可视化工具
- Appium Desktop:(可选,未安装状态下可直接使用命令行启动Appium)下载地址(2022年后停止更新)
- Appium Inspector:下载地址(元素定位与调试工具)
二、设备与环境验证
1. 设备信息获取
# 获取设备UDID
idevice_id -l# 查看设备详细信息
ideviceinfo
ideviceinfo -k DeviceName # 设备名称
ideviceinfo -k ProductVersion # iOS版本# 查看已安装应用列表
ideviceinstaller -l -o list_user# 验证设备连接
ios-deploy -c
2. 环境健康检查
appium-doctor --ios
三、WebDriverAgent编译部署
1. 设备端准备
- 开启开发者模式:设置 > 隐私与安全性 > 开发者模式(连点开启)
- 启用UI自动化:开发者选项 > 启用UI自动化
2. 项目配置
# 修改文件所有权(Username修改为自己的appium实际安装路径)
sudo chown -R $(whoami) /Users/{Username}/.appium# 编辑 WebDriverAgent.xcodeproj 项目(下面2种方式任选其1)
# 1. 命令行快速启动项目
sudo appium driver run xcuitest open-wda
# 2. 手动双击文件 WebDriverAgent.xcodeproj 文件启动
/Users/{Username}/.appium/node_modules/appium-xcuitest-driver/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj
3. Xcode证书配置
-
修改以下目标的签名配置(每一个都要配置!!!):
- WebDriverAgentRunner
- WebDriverAgentLib
- IntegrationApp
-
配置要点:
-
勾选
Automatically manage signing
-
Team
一栏选择个人开发者账号(需登录Apple ID) -
修改
Bundle Identifier
(把Facebook
的内容换成自己的(随便修改,保证唯一即可)
-
设置目标iOS版本与设备iOS版本匹配
-
修改Scheme
Product -> Scheme -> WebDriverAgentRunner
-
修改Destination
Product -> Destination -> 选择自己的手机
-
4. 编译与部署
- 执行测试编译:
Product > Test
- 首次编译安装时会遇到需要证书授权的报错,需要在手机上信任证书后再次执行第1步:
- 设置 > 通用 > VPN与设备管理 > 信任开发者证书
- 设置 > 通用 > VPN与设备管理 > 信任开发者证书
- 验证服务状态:
- 手机访问
localhost:8100/status
- 命令行执行端口映射:
# 端口映射 (把手机上启动的8100端口服务映射到电脑端)iproxy 8100 8100
- 电脑访问
localhost:8100/status
- 手机访问
四、自动化测试执行
1. 启动Appium服务
appium --allow-cors
2. 配置Appium Inspector
{"platformName": "iOS","appium:deviceName": "XXXXX", //手机名"appium:platformVersion": "18.3.1", //手机iOS系统版本"appium:bundleId": "com.tencent.xin", //要启动的手机app的bundleId"appium:automationName": "XCUITest","appium:xcodeOrgId": "XXXXX", //开发者ID"appium:udid": "XXXXXXXX-XXXXXXXXXXXX", //手机设备ID"appium:noReset": true,"appium:xcodeSigningId": "iPhone Developer"
}
3. 参数获取方法
参数项 | 获取命令 |
---|---|
deviceName | ideviceinfo -k DeviceName |
platformVersion | ideviceinfo -k ProductVersion |
bundleId | ideviceinstaller -l -o list_user |
udid | idevice_id -l |
xcodeOrgId | Xcode账户设置中查看(如下图,在这个界面下点击那个 Other就能获取了) |
4. 启动测试会话
- 确保设备处于解锁状态
- 点击Start Session开始自动化测试
五、常见问题排查
- 证书信任问题:需在设备端手动信任开发者证书
- 端口占用冲突:确保8100端口未被其他程序占用
- WDA编译失败:检查Xcode版本与iOS系统版本兼容性
- 元素定位失败:使用Appium Inspector验证控件树结构
提示:建议保持iOS设备屏幕常亮(设置 > 显示与亮度 > 自动锁定 > 永不)
相关文章:

iOS手机App爬虫- (1) Mac安装Appium真机运行环境
iOS手机App爬虫 一、环境准备与工具安装1. 开发基础环境配置1.1 Node.js环境1.2 Xcode套件1.3 Java环境 2. 核心测试工具链2.1 Appium主程序2.2 辅助工具集 3. 可视化工具 二、设备与环境验证1. 设备信息获取2. 环境健康检查 三、WebDriverAgent编译部署1. 设备端准备2. 项目配…...
android s下make otapackage编译失败
[DESCRIPTION] android s上,我司推荐使用split build的方式进行编译,但是部分客户依旧会采用AOSP full build的方式进行编译。而我司在这块release的时候,并未进行验证。因此执行make otapackage的时候,会出现如下报错。 [0312/…...
《Elasticsearch实战:从零开始构建高效全文搜索引擎》
内容概览: Elasticsearch简介 Elasticsearch的定义与应用场景 Elasticsearch的核心特性 环境搭建与安装 安装Elasticsearch 启动与配置Elasticsearch 索引设计与映射 创建索引 定义映射(Mapping) 字段类型与分析器的选择 数据导入与管理…...

【Linux网络】认识协议(TCP/UDP)、Mac/IP地址和端口号、网络字节序、socket套接字
⭐️个人主页:小羊 ⭐️所属专栏:Linux 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 1、初识协议2、UDP、TCP3、Mac、IP地址4、端口号5、网络字节序6、socket 1、初识协议 协议就是一种约定。如何让不同厂商生产的计…...

12、数据库、Sql单表多表
文章目录 一、数据库简介二、单表三、多表四、等值连接五、内联结六、inner join on、left join on、right join on区别七、模糊查找八、作业 一、数据库简介 数据在内存: 优点:读写速度快缺点:程序结束后数据丢失 保存到文件 优点&#…...
Spring Boot 实现图片上传并生成缩略图功能
在实际开发中,上传图片并生成缩略图是一项常见需求,例如在电商平台、社交应用等场景中,缩略图可以有效提高页面加载速度,优化用户体验。本文将介绍如何在 Spring Boot 项目中实现上传图片并生成缩略图的功能。 📦 1. …...

洛谷B3664[语言月赛202209] 零食售卖点
B3664 [语言月赛202209] 零食售卖点 - 洛谷 代码区: #include<bits/stdc.h>using namespace std;int main(){int n;cin >> n;int arry[n],dp[n];for(int i0;i<n;i){cin >> arry[i];}dp[0]0;sort(arry,arryn);for(int i1;i<n;i){dp[i]arry…...
贪心算法:JAVA从理论到实践的探索
在计算机科学领域,贪心算法是一种简单而高效的算法设计策略,广泛应用于优化问题的求解。它通过在每一步选择中都采取当前状态下最优的选择,以期望最终得到全局最优解。本文将深入探讨贪心算法的原理、应用场景,并通过具体代码示例,帮助读者更好地理解和掌握这一算法。 一…...
线程池10种常见坑
1. 直接使用 Executors 创建线程池 直接使用 Executors 提供的快捷方法: ExecutorService executor Executors.newFixedThreadPool(10);问题 无界队列:newFixedThreadPool 使用的队列是 LinkedBlockingQueue,它是无界队列,任务…...

鸿蒙ArkTs如何实现pdf预览功能?
鸿蒙ArkTs如何实现pdf预览功能? 前言PDFKit运行示例代码报错真机运行先看效果一、预览本地pdf文件二、预览线上的pdf文件三、预览沙箱目录中pdf的文件(重点)效果中的整体代码总结 Harmony OS NEXT版本(接口及解决方案兼容API12版本或以上版本) 前言 在开…...

KylinSP3 | 防火墙和麒麟安全增强设置KySec
一、系统防火墙原理 麒麟操作系统从V10版本开始,默认使用了Firewalld防火墙,Firewalld是能提供动态管理的防火墙,支持网络/防火墙区域,用于定义网络连接或接口的信任级别。支持IPv4和IPv6防火墙设置、以太网桥接和IP集。将运行时…...
【C++】面试常问八股
5、内存管理 野指针 野指针指的是未进行初始化或未清零的指针,不是NULL指针野指针产生原因及解决方案: 指针变量未初始化:指针变量定义时若未初始化,则其指向的地址是随机的,不为NULL;定义时初始化为NULL…...

vscode多文件编译构建(CMake)和调试C++
目录 1. CMake 基础构建工具及作用相关配置文件 2. 配置 tasks.json关键字段详细解释 3. 配置 launch.json关键字段详细解释 4. 配置 CMakeLists.txt关键部分详细解释 5. 构建和调试项目1. 仅构建项目1.1 任务执行顺序1.2 cmake 任务执行详情1.3 build 任务执行详情1.4 构建后的…...
使用Docker 部署 LNMP+Redis 环境
使用Docker 部署 LNMPRedis 环境 Docker 简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互…...
文件上传漏洞学习笔记
一、漏洞概述 定义 文件上传漏洞指未对用户上传的文件进行充分安全校验,导致攻击者可上传恶意文件(如Webshell、木马),进而控制服务器或执行任意代码。 危害等级 ⚠️ 高危漏洞(通常CVSS评分7.0)ÿ…...
375_C++_cloud手机推送,添加人脸告警信息到任务队列中,UploadAlarmPush是典型的工厂模式应用,为什么使用工厂模式完成这部分代码
一:AlarmFaceInfo的应用 让我帮你解析这个lambda表达式的实现: // ...................... .h ...........................// struct RsMsgPushTask_S : public Task{AlarmType_E mainAlarmType;unsigned int subAlarmType;DateTime alarmTime...
Spring Boot 中的日志管理
一、日志框架选择 1. 主流框架对比 框架特点Spring Boot 默认支持Logback- 性能优异,Spring Boot 默认集成- 支持自动热更新配置文件✅ (默认)Log4j2- 异步日志性能更强- 支持插件扩展- 防范漏洞能力更好❌ (需手动配置)JUL (JDK自带)- 无需额外依赖- 功能简单&am…...

火绒终端安全管理系统V2.0网络防御功能介绍
火绒终端安全管理系统V2.0 【火绒企业版V2.0】网络防御功能包含网络入侵拦截、横向渗透防护、对外攻击检测、僵尸网络防护、Web服务保护、暴破攻击防护、远程登录防护、恶意网址拦截。火绒企业版V2.0的网络防御功能,多层次、多方位,守护用户终端安全。 …...

海康摄像头 + M7s(Monibuca) + FFmpeg + Python实现多个网络摄像头视频流推流
最近在研究流媒体服务器时,我注意到了一款开源软件——M7s。按照官网的指南部署完成后,我开始进行测试,发现单视频流推送非常顺利,没有任何问题。然而,当我尝试进行多视频流推送时,却发现网上的相关教程寥寥…...
抖音视频如何下载保存去水印
随着短视频平台的兴起,抖音作为国内最受欢迎的短视频平台之一,吸引了大量用户上传和观看各种创意视频。许多用户在浏览抖音视频时,往往会想要保存一些有趣或精彩的视频片段,但抖音视频通常会有水印,影响观看体验。为了…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...