Android自动化中动态设置网络代理

简介: 由于现在很多应用的页面数据都是AI算法推荐生成的,所以每次打开同一个页面数据都会不一样,因此在做客户端UI自动化的过程中都会采用Mock方案,利用MockServer来提供稳定的测试数据,其中MockServer的代理需要手动配置。拿Android手机举例,过程大致是:进入设置->进入 WLAN ->找对应 wifi 连接->进入详情->找到代理->选择手动->输入主机名->输入端口号->最后保存,可以看到每次都是重复操作,特别当你的自动化设备很多以及MockServer服务不稳定导致IP经常变的情况下累加的时间成本是很高的,而且一不小心,还有可能写错

方案


今天给大家分享一下如何通过命令行动态设置Android手机的代理,其实如果只有一台手机,直接执行下面的命令行即可:

设置代理
adb shell settings put global http_proxy ip:port
清除代理
adb shell settings put global http_proxy :0

但是当宿主机挂载了多台设备的时候,就需要指定设备了,正常来说直接-s指定设备SN号即可,但是这里会有些问题,代理并不会生效,需要将原生的adb命令用pure-python-adb 这个Python库代替,这个是通过纯Python实现的ADB客户端,原理如下:


image.png

再通过Flask-Script把设置代理和清除代理封装成命令行工具,实现代码如下:

from flask_script import Manager
from ppadb.client import Client as AdbClient
@manager.option('-sn', '--sn', dest='sn', default='', help='设备sn号')
@manager.option('-proxy', '--proxy', dest='proxy', default='', help='代理地址加端口')
def set_proxy(sn, proxy):
    try:
        client = AdbClient(host="127.0.0.1", port=5037)
        device = client.device(sn)
        device.shell("settings put global http_proxy {0}".format(proxy))
        LOGGER.debug("settings put global http_proxy {0}".format(proxy))
    except Exception as e:
        LOGGER.error(e)
@manager.option('-sn', '--sn', dest='sn', default='', help='设备sn号')
def clean_proxy(sn):
    try:
        client = AdbClient(host="127.0.0.1", port=5037)
        device = client.device(sn)
        device.shell("settings put global http_proxy :0")
        LOGGER.debug("settings put global http_proxy :0")
    except Exception as e:
        LOGGER.error(e)

需要注意的是通过这种方式自动设置代理后WiFi高级选项中是看不到代理信息的而且无法取消,必须通过命令取消。

相关文章
|
4天前
|
网络协议 Linux
使用nmcli命令设置IP地址并排查网络故障
nmcli 是一个功能强大的网络管理工具,通过它可以轻松配置IP地址、网关和DNS,同时也能快速排查网络故障。通过正确使用nmcli命令,可以确保网络配置的准确性和稳定性,提高系统管理的效率。希望本文提供的详细步骤和示例能够帮助您更好地掌握nmcli的使用方法,并有效解决实际工作中的网络问题。
10 2
|
12天前
|
数据采集 存储 XML
Python实现网络爬虫自动化:从基础到实践
本文将介绍如何使用Python编写网络爬虫,从最基础的请求与解析,到自动化爬取并处理复杂数据。我们将通过实例展示如何抓取网页内容、解析数据、处理图片文件等常用爬虫任务。
|
19天前
|
网络协议 Shell 网络安全
解决两个 Android 模拟器之间无法网络通信的问题
让同一个 PC 上运行的两个 Android 模拟器之间能相互通信,出(qiong)差(ren)的智慧。
21 3
|
1月前
|
运维 监控 网络安全
Python 在网络运维方面的自动化应用实例
Python 在网络运维方面的自动化应用实例
|
1月前
|
Ubuntu 网络安全 数据安全/隐私保护
阿里云国际版如何设置网络控制面板
阿里云国际版如何设置网络控制面板
|
29天前
|
数据采集 存储 数据处理
从网络请求到Excel:自动化数据抓取和保存的完整指南
本文介绍了如何使用Python自动化采集东方财富股吧的发帖信息,并将其保存到Excel中。通过代理IP、多线程和网页解析技术,规避反爬虫机制,高效抓取帖子标题和发帖时间,帮助投资者获取市场情绪和热点数据。
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
Nature子刊:基于内生复杂性,自动化所新类脑网络构筑人工智能与神经科科学的桥梁
【9月更文挑战第11天】中国科学院自动化研究所的研究人员提出了一种基于内生复杂性的新型类脑网络模型,通过模拟人脑内部神经元间的复杂互动来提升AI系统的智能与适应性。此模型利用图神经网络(GNN)并设计分层图结构对应人脑不同功能区,引入自适应机制根据输入数据调整结构。实验表明,此模型在图像分类及自然语言处理等任务中表现出显著提升的性能,并且处理复杂数据时更具备适应性和鲁棒性。论文链接:https://www.nature.com/articles/s43588-024-00674-9。
55 7
|
2月前
|
网络协议 算法 网络性能优化
C语言 网络编程(十五)套接字选项设置
`setsockopt()`函数用于设置套接字选项,如重复使用地址(`SO_REUSEADDR`)、端口(`SO_REUSEPORT`)及超时时间(`SO_RCVTIMEO`)。其参数包括套接字描述符、协议级别、选项名称、选项值及其长度。成功返回0,失败返回-1并设置`errno`。示例展示了如何创建TCP服务器并设置相关选项。配套的`getsockopt()`函数用于获取这些选项的值。
|
3月前
|
运维 安全 应用服务中间件
自动化运维的利器:Ansible入门与实战网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【8月更文挑战第30天】在当今快速发展的IT时代,自动化运维已成为提升效率、减少错误的关键。本文将介绍Ansible,一种流行的自动化运维工具,通过简单易懂的语言和实际案例,带领读者从零开始掌握Ansible的使用。我们将一起探索如何利用Ansible简化日常的运维任务,实现快速部署和管理服务器,以及如何处理常见问题。无论你是运维新手还是希望提高工作效率的资深人士,这篇文章都将为你开启自动化运维的新篇章。
|
3月前
|
敏捷开发 测试技术 持续交付
软件测试中的自动化策略与实践云计算时代的网络安全挑战与对策
【8月更文挑战第30天】在软件开发的海洋中,自动化测试是一艘能够带领团队高效航行的帆船。本文将探讨如何搭建这艘帆船,从选择适合的自动化测试框架开始,到编写有效的测试脚本,再到持续集成的实施和测试结果的分析,我们将一步步揭开自动化测试的神秘面纱。你将学习到如何通过自动化测试来提升软件质量和开发效率,以及如何克服实施过程中的挑战。让我们一起启航,探索自动化测试的世界。