web页面的遍历方案
1、 web页面遍历
· ① 基于selenium框架,获取页面的 DOM 树结构,然后对其解析,python下可以使用 BeautifulSoup,将 DOM 树转换成可视的数据结构;
· ② 对可视的数据结构进一步解析,拼接每个元素的 xpath 路径。(这里有个思路:判断每条分分支的根节点标签,优先取根节点标签的 id、class来开始拼接 xpath,后续的标签不需要判断它的id 或者 class是否唯一,仅用标签名字一步步拼接下去)
· ③ 第二步中拼接出的 xpath 的无效数据太多,若是不考虑效率问题,可直接使用;需要考虑效率时,需要自定义筛选条件(在做筛选时有几个思路:1)可以在解析DOM时做筛选;2)根据页面内容,排除无需点击的控件)
· ④ 处理完树结构后,开始做遍历点击操作,这部分反而是最简单的。通过 driver.execute_script(“arguments[0].click();”, temp) 来执行强点击事件,一般而言,只需要根据3个条件便可判断页面是否发生变化:1)新增页面,此时关闭新页签,然后用switch_window 重新定焦;2)地址栏发生变化,用 driver.back()回退;3)最后是页面DOM 数发生变化,重新get 一下页面即可,这种情况需要根据实际情况考虑异步加载的问题
· 【备注】对DOM树处理的筛选条件越多,方案的通用性越低
2、移动app内嵌web页面遍历
· ① 获取页面的控件树,取出每个控件的 name 或 text 属性,根据这个属性做点击遍历操作;
· ② 页面的变化判断有多种方案,比如:图像识别、控件树比对、关键元素变化等,选择合适的方案即可
3、app遍历
· ① app遍历可基于前面提到的方案进行处理,但其中有个难题:如何保证当前页面被全遍历了,尤其是 tab 切换; 多个页面的activey相同但实际ui元素不同。目前来说,有些思路,但效率可能不高,等以后有机会实现了再来谈谈。
4、结语
1)以上场景中,没详细说的是对异常情况的处理以及如何恢复初始化条件,在出现异常后紧接着上一步异常之后继续做遍历事件,较简单的页面式方便做的,复杂的就不太行,比如移动app,针对整个移动app的遍历目前我还没做出过完整的方案,虽然有些思路。想着那个复杂度就头秃。
2)有些团队已经做出了有完全可用的遍历方案,以及利用深度学习、AI 等技术研发出了更高的项目,这都是我学习、了解的方向,测试一行,尽量避免闭门造车,不然眼界太低了,自勉。
3)若有朋友、前辈有不同的思路,敬请指教~