automa的工程还是要经常导出备份,因为经常出现突然模块消失的情况。
1 滑动分页条件区分
传统的页面都是有分页标签,这样你很容易知道,应该用分页来做。但是现在手机端的应用基本都是上滑就可以分页,再混合式开发的环境下,公司为了节省成本,大部分都可以实现一套代码,再不同形态环境做适配,而这样给我们做爬虫也造成了困难。
在控制台中执行,获取元素高度,通过判断,是可以的
但是使用automa中使用js条件模块却获取不到值,实际得不到,这是为何?
const elVal = document.getElementsByClassName('explorer-file-list-virtualized__container')[0];
return elVal.scrollHeight > elVal.clientHeight;
之所以出不来是因为,这个地方应该选择当前标签页
接下载我想着,干脆使用滚动元素,让页面中的数据全部加载进来,再循环,结果发现页面上明明有1000条数据,但使用document.querySelectorAll('.file-list-item').length
却只得到20条,这是为何?
如果让他在每次循环后,进行滚动。
看结果,奇怪的是中间跳号,数据丢失了!
推理,出现跳行,可能因为根据垂直滚动的高度有关.于是设置为20,则发现界面在一点点动,数据会被重复插入。那么你怎么知道怎样才是合理的高度,勾选上滚动查看
也是同样的问题,而且滚动的速度分页太慢。
2 延迟的处理
延迟的位置还是很重要,特别是悬停元素使用时.例如下图,因为最后一个悬停元素,点击后,会出现下载文件,因此再之前做一个延迟,防止多级浮动按钮没有出来。接着再关闭页签之前,也设置一个较长时间的延迟,因为下载文件还没有被发现之前就关闭当前页签,浏览器会忽略这次下载行为。因此需要补上。
3 重复执行的去重判断
技术性demo都没什么问题,但是一旦工程化,就复杂了。例如下面的工作流程,循环、子工作流、条件、滚动元素等基本都包含了,而且采集的数据也非常多,靠人力很难枚举各种情况,于是除了问题,又不想把之前的反复下载,如何解决呢?再使用过程中,下载文件到300多项时,浏览器崩溃,只下载了30%,再重复下载或者调试,浪费了不少时间,如何解决呢?
首先看为什么工作流出错,就停止工作流呢?因为这个地方默认值设置,就是这样。