系列文章

  1. 微信公众号数据采样试验
  2. mitmproxy实时数据处理
  3. appium对手机微信的自动化测试
  4. winAppDriver对桌面微信的自动化测试
  5. 场景文字识别的快速调研
  6. UI Automation对桌面微信的自动化测试
  7. 基于机器视觉的桌面窗体组件的目标检测.notFinished

需求与目标

在该系列的前述文章中, 我们已经实现了对微信订阅号的文章的爬取. 所使用的方法就是利用mitmproxy截获流量, 并直接从网络流量中重构、还原文章内容及其其它元数据. 但是, 在这个过程中我需要在手机微信的app中, 手动地浏览并打开订阅号中的文章. 非常低效与耗费人工. 因此, 我需要一个工具, 帮我自动浏览微信订阅号(从而激活网络流量, 顺利抓取文章内容).

这就需要使用到手机端的软件自动化测试技术. 目前在手机端进行自动化测试的工具, 其中功能比较完善的是Appium [1] . 本文的目标就是: 利用Appium对手机软件的自动化测试方法, 对手机微信app自动地翻页、点击相关文章, 从而激活流量. (其余的抓取流量并重构公众号文章内容的功能, 我在前面的系列文章已经完成)

方案与实施

端口转发:手机到WSL2

如果是在Windows系统中, 使用WSL2环境(不是WSL1)运行mitmproxy的话, 即使手机的局域网代理地址填写了windows主机的ip地址, 手机流量依然无法到达WSL2的mitmproxy. 其原因在于WSL2环境位于虚拟机中. 要解决此问题, 需要在window的cmd中, 建立Windows主机源端口到WSL2虚拟机目标端口的流量转发规则 [2] . 方法简要记录如下:

  1. 参数选择. windows下的源端口是9090, WSL2中的目标端口是8080(这是mitmproxy默认的端口).

  2. 以管理员身份打开Power Shell, 并执行下述命令, 建立从windows到wsl2的流量转发规则:

    1
    2
    netsh interface portproxy add v4tov4 listenport=9090 listenaddress=0.0.0.0 connectport=8080 connectaddress=xxx.xxx.xxx.xxx
    # xxx.xxx.xxx.xxx是WSL2的ip地址
  3. 使用 netsh interface portproxy show all 查看自己建立的端口映射是否存在.

  4. 根据需求使用此步骤: 如果想要删除的话,执行 netsh interface portproxy delete v4tov4 listenport=8001 listenaddress=0.0.0.0

  5. 在Windows防火墙中, 为刚才的端口映射规则添加入站规则:

    依次打开防火墙与网络保护–>高级设置–>入站规则. 点击新建规则. 这里第一步选择端口–>选择TCP–>点击特定本地端口,填入之前选择的windows源端口(我这里是8001)–点击第一个允许连接,之后一路继续就好了. 一直到配置完成. 之后同理,完成UDP协议的转发设置. 参考下图:

appium对手机微信进行自动化测试-建立从window宿主电脑到wsl2端口的流量转发规则.png

  1. 为同一局域网中的手机设置代理地址: 192.168.7.244:9090. 注意, 此处的端口是9090, 而不是mitmproxy的8080.
手机端出现了暂时无法克服的困难. 在手机端采集数据的想法暂时搁浅了

结果与评价

目前用mitm的方法从微信中采集公众号文章面临着两个困难:

  1. 数据的动态加载。这个还好说,更难受的下面那一条:
  2. 手机系统的破解,以及证书绑定的破解。

考虑到我已经实现了在PC端上对微信公众号文章的数据采集 [3],也算是有的用了。

遂放弃了在手机上对微信公众号数据的采集。期望哪天有大佬愿意不吝赐教

换个角度看,PC端也是一些厂商的薄弱环节。所以不要因为手机端App的热门就放弃了PC技术的开发利用。

参考与注释