当前位置: 首页 > news >正文

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安装示意图
  • 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证书配置

  1. 修改以下目标的签名配置(每一个都要配置!!!):

    • WebDriverAgentRunner
    • WebDriverAgentLib
    • IntegrationApp
  2. 配置要点:

    • 勾选Automatically manage signing

    • Team 一栏选择个人开发者账号(需登录Apple ID)

    • 修改Bundle Identifier(把 Facebook 的内容换成自己的(随便修改,保证唯一即可)
      证书配置示意图

    • 设置目标iOS版本与设备iOS版本匹配
      在这里插入图片描述

    • 修改Scheme Product -> Scheme -> WebDriverAgentRunner
      在这里插入图片描述

    • 修改Destination Product -> Destination -> 选择自己的手机
      在这里插入图片描述

4. 编译与部署

  1. 执行测试编译:Product > Test
  2. 首次编译安装时会遇到需要证书授权的报错,需要在手机上信任证书后再次执行第1步:
    • 设置 > 通用 > VPN与设备管理 > 信任开发者证书
      在这里插入图片描述
      在这里插入图片描述
  3. 验证服务状态:
    • 手机访问localhost:8100/status
      在这里插入图片描述
    • 命令行执行端口映射:
     # 端口映射 (把手机上启动的8100端口服务映射到电脑端)iproxy 8100 8100
    
    • 电脑访问localhost:8100/status
      服务状态验证

四、自动化测试执行

1. 启动Appium服务

appium --allow-cors

Appium启动示意图

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. 参数获取方法

参数项获取命令
deviceNameideviceinfo -k DeviceName
platformVersionideviceinfo -k ProductVersion
bundleIdideviceinstaller -l -o list_user
udididevice_id -l
xcodeOrgIdXcode账户设置中查看(如下图,在这个界面下点击那个 Other就能获取了)

组织ID获取示意图

4. 启动测试会话

  • 确保设备处于解锁状态
  • 点击Start Session开始自动化测试

测试会话示意图

五、常见问题排查

  1. 证书信任问题:需在设备端手动信任开发者证书
  2. 端口占用冲突:确保8100端口未被其他程序占用
  3. WDA编译失败:检查Xcode版本与iOS系统版本兼容性
  4. 元素定位失败:使用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] 零食售卖点 - 洛谷 代码区&#xff1a; #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 提供的快捷方法&#xff1a; ExecutorService executor Executors.newFixedThreadPool(10);问题 无界队列&#xff1a;newFixedThreadPool 使用的队列是 LinkedBlockingQueue&#xff0c;它是无界队列&#xff0c;任务…...

鸿蒙ArkTs如何实现pdf预览功能?

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

KylinSP3 | 防火墙和麒麟安全增强设置KySec

一、系统防火墙原理 麒麟操作系统从V10版本开始&#xff0c;默认使用了Firewalld防火墙&#xff0c;Firewalld是能提供动态管理的防火墙&#xff0c;支持网络/防火墙区域&#xff0c;用于定义网络连接或接口的信任级别。支持IPv4和IPv6防火墙设置、以太网桥接和IP集。将运行时…...

【C++】面试常问八股

5、内存管理 野指针 野指针指的是未进行初始化或未清零的指针&#xff0c;不是NULL指针野指针产生原因及解决方案&#xff1a; 指针变量未初始化&#xff1a;指针变量定义时若未初始化&#xff0c;则其指向的地址是随机的&#xff0c;不为NULL&#xff1b;定义时初始化为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 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互…...

文件上传漏洞学习笔记

一、漏洞概述 定义 文件上传漏洞指未对用户上传的文件进行充分安全校验&#xff0c;导致攻击者可上传恶意文件&#xff08;如Webshell、木马&#xff09;&#xff0c;进而控制服务器或执行任意代码。 危害等级 ⚠️ 高危漏洞&#xff08;通常CVSS评分7.0&#xff09;&#xff…...

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- 性能优异&#xff0c;Spring Boot 默认集成- 支持自动热更新配置文件✅ (默认)Log4j2- 异步日志性能更强- 支持插件扩展- 防范漏洞能力更好❌ (需手动配置)JUL (JDK自带)- 无需额外依赖- 功能简单&am…...

火绒终端安全管理系统V2.0网络防御功能介绍

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

海康摄像头 + M7s(Monibuca) + FFmpeg + Python实现多个网络摄像头视频流推流

最近在研究流媒体服务器时&#xff0c;我注意到了一款开源软件——M7s。按照官网的指南部署完成后&#xff0c;我开始进行测试&#xff0c;发现单视频流推送非常顺利&#xff0c;没有任何问题。然而&#xff0c;当我尝试进行多视频流推送时&#xff0c;却发现网上的相关教程寥寥…...

抖音视频如何下载保存去水印

随着短视频平台的兴起&#xff0c;抖音作为国内最受欢迎的短视频平台之一&#xff0c;吸引了大量用户上传和观看各种创意视频。许多用户在浏览抖音视频时&#xff0c;往往会想要保存一些有趣或精彩的视频片段&#xff0c;但抖音视频通常会有水印&#xff0c;影响观看体验。为了…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...