You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python/Appium中提取Android测试设备的网络流量?

在Python/Appium环境中捕获Android应用网络流量的方案

当然有,下面是几种在Python+Appium环境下实现类似Selenium Wire捕获网络流量的实用方案:

方法1:mitmproxy + Appium

mitmproxy是个开源代理工具,能通过Python脚本拦截分析HTTP/HTTPS请求,步骤如下:

  1. 本地启动mitmdump(mitmproxy的命令行工具),配合自定义脚本捕获请求
  2. 配置Appium驱动的Android设备代理,指向mitmproxy的服务地址(比如你电脑的本地IP:8080)
  3. 编写Python脚本监听请求事件,提取所需的网络数据

捕获请求的脚本示例:

from mitmproxy import http

class CaptureRequests:
    def request(self, flow: http.HTTPFlow) -> None:
        # 提取请求核心信息
        print(f"请求URL: {flow.request.url}")
        print(f"请求方法: {flow.request.method}")
        print(f"请求头: {dict(flow.request.headers)}")
        # 也可以把数据写入文件或数据库留存

# 启动命令:在终端运行 `mitmdump -s your_capture_script.py`

Appium代理配置示例:

from appium import webdriver

desired_caps = {
    "platformName": "Android",
    "deviceName": "你的设备名",
    "appPackage": "com.your.target.app",
    "appActivity": ".MainActivity",
    "proxy": {
        "proxyType": "MANUAL",
        "httpProxy": "192.168.x.x:8080",  # 替换成你的本地IP和mitmproxy端口
        "sslProxy": "192.168.x.x:8080"
    }
}

driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)

⚠️ 注意:要捕获HTTPS流量,必须在Android设备上安装mitmproxy的CA证书,具体操作可参考mitmproxy官方的设备配置说明。

方法2:tcpdump + Appium

通过Android设备的tcpdump工具抓包,导出后用Python解析,不需要代理:

  1. 确保设备有root权限,或已安装tcpdump工具
  2. 启动Appium驱动后,用adb命令启动抓包:
adb shell tcpdump -i any -w /sdcard/app_traffic.pcap
  1. 测试完成后,把抓包文件拉到本地:
adb pull /sdcard/app_traffic.pcap ./
  1. 用Python的scapy库解析pcap文件,提取HTTP流量:
from scapy.all import rdpcap, HTTPRequest, TCP

# 读取抓包文件
packets = rdpcap("app_traffic.pcap")
for packet in packets:
    if packet.haslayer(HTTPRequest):
        http_req = packet[HTTPRequest]
        print(f"请求方法: {http_req.Method.decode()}")
        print(f"请求URL: {http_req.Host.decode() + http_req.Path.decode()}")

⚠️ 注意:这种方法抓HTTPS流量只能看到加密后的内容,除非你有应用的SSL私钥或证书,否则无法解析明文。

方法3:BrowserMob Proxy + Appium

BrowserMob Proxy是个可嵌入的HTTP代理,支持通过Python API控制和捕获请求:

  1. 先安装依赖:pip install browsermob-proxy,还要下载BrowserMob Proxy的二进制文件
  2. 启动代理服务,创建代理实例,配置Appium设备代理
  3. 执行测试后,通过API获取捕获的请求数据

代码示例:

from browsermobproxy import Server
from appium import webdriver

# 启动BrowserMob Proxy服务,替换成你的二进制文件路径
server = Server("/path/to/browsermob-proxy")
server.start()
proxy = server.create_proxy()

# 配置Appium的desired caps
desired_caps = {
    "platformName": "Android",
    "deviceName": "你的设备名",
    "appPackage": "com.your.target.app",
    "appActivity": ".MainActivity",
    "proxy": {
        "proxyType": "MANUAL",
        "httpProxy": f"{proxy.proxy_host}:{proxy.proxy_port}",
        "sslProxy": f"{proxy.proxy_host}:{proxy.proxy_port}"
    }
}

# 开始捕获请求
proxy.new_har("app_test_traffic")
driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)

# 这里执行你的测试操作,比如点击按钮、跳转页面等

# 获取捕获的所有请求
har_data = proxy.har
for entry in har_data['log']['entries']:
    req_info = entry['request']
    print(f"URL: {req_info['url']}")
    print(f"请求方法: {req_info['method']}")

# 收尾工作
driver.quit()
proxy.close()
server.stop()

⚠️ 注意:BrowserMob Proxy对最新Android版本的兼容性可能不如mitmproxy,遇到问题可以试试旧版本的二进制文件。

内容的提问来源于stack exchange,提问作者Jack Gee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 15:45:29