appium对手机微信的自动化测试
系列文章
- 微信公众号数据采样试验
- mitmproxy实时数据处理
- appium对手机微信的自动化测试
- winAppDriver对桌面微信的自动化测试
- 场景文字识别的快速调研
- UI Automation对桌面微信的自动化测试
- 基于机器视觉的桌面窗体组件的目标检测.notFinished
需求与目标
在该系列的前述文章中, 我们已经实现了对微信订阅号的文章的爬取. 所使用的方法就是利用mitmproxy截获流量, 并直接从网络流量中重构、还原文章内容及其其它元数据. 但是, 在这个过程中我需要在手机微信的app中, 手动地浏览并打开订阅号中的文章. 非常低效与耗费人工. 因此, 我需要一个工具, 帮我自动浏览微信订阅号(从而激活网络流量, 顺利抓取文章内容).
这就需要使用到手机端的软件自动化测试技术. 目前在手机端进行自动化测试的工具, 其中功能比较完善的是Appium [1] . 本文的目标就是: 利用Appium对手机软件的自动化测试方法, 对手机微信app自动地翻页、点击相关文章, 从而激活流量. (其余的抓取流量并重构公众号文章内容的功能, 我在前面的系列文章已经完成)
方案与实施
端口转发:手机到WSL2
如果是在Windows系统中, 使用WSL2环境(不是WSL1)运行mitmproxy的话, 即使手机的局域网代理地址填写了windows主机的ip地址, 手机流量依然无法到达WSL2的mitmproxy. 其原因在于WSL2环境位于虚拟机中. 要解决此问题, 需要在window的cmd中, 建立Windows主机源端口到WSL2虚拟机目标端口的流量转发规则 [2] . 方法简要记录如下:
参数选择. windows下的源端口是9090, WSL2中的目标端口是8080(这是mitmproxy默认的端口).
以管理员身份打开Power Shell, 并执行下述命令, 建立从windows到wsl2的流量转发规则:
1
2netsh interface portproxy add v4tov4 listenport=9090 listenaddress=0.0.0.0 connectport=8080 connectaddress=xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx是WSL2的ip地址使用
netsh interface portproxy show all
查看自己建立的端口映射是否存在.根据需求使用此步骤: 如果想要删除的话,执行
netsh interface portproxy delete v4tov4 listenport=8001 listenaddress=0.0.0.0
在Windows防火墙中, 为刚才的端口映射规则添加入站规则:
依次打开防火墙与网络保护–>高级设置–>入站规则. 点击新建规则. 这里第一步选择端口–>选择TCP–>点击特定本地端口,填入之前选择的windows源端口(我这里是8001)–点击第一个允许连接,之后一路继续就好了. 一直到配置完成. 之后同理,完成UDP协议的转发设置. 参考下图:
- 为同一局域网中的手机设置代理地址:
192.168.7.244:9090
. 注意, 此处的端口是9090, 而不是mitmproxy的8080.
结果与评价
目前用mitm的方法从微信中采集公众号文章面临着两个困难:
- 数据的动态加载。这个还好说,更难受的下面那一条:
- 手机系统的破解,以及证书绑定的破解。
考虑到我已经实现了在PC端上对微信公众号文章的数据采集 [3],也算是有的用了。
遂放弃了在手机上对微信公众号数据的采集。期望哪天有大佬愿意不吝赐教
换个角度看,PC端也是一些厂商的薄弱环节。所以不要因为手机端App的热门就放弃了PC技术的开发利用。