程序的主流程顺序是:当前页面列表识别-->后续任务生成
下面按照重要以及有趣的顺序介绍。
1.列表页识别
首先我们不妨去思考,作为活生生的人你如何发现这个页面是你想要的列表页?是不是因为你可以一眼就看见列表?那么列表页面的规则我们基本就找全了:
1.排列规则的链接被你认为是列表
2.你能一眼看见这些排列规则的链接说明它们的整体区域在你的主视图范围内。只要你认同以上想法,认为页面中心的列表才是我们想要的列表就可以看下面的流程图了。
1.连续多列表块,如http://www.chinasafety.gov.cn/newpage/aqbz/aqbz_gjbzgb.htm。
2.加入权重打分机制一开始是为了过滤写的比较诡异的导航栏,可以有效提高识别准确性,不造成误判。
3.而其他过滤规则,举个例子 http://jgdw.chinasafety.gov.cn/login (随便找的 大家意会一下)这种含有更多的肯定不是我们的目标页面,而更多点进去才是。
4.而加入页面中有<h1>且h1中的文本与网页的title相同,不要想了九成九是文章页,直接过滤就好,这是小样本。
识别效果图如下:
2.目录树展开
假如页面包含目录树,去尝试展开,展开方式为执行JavaScript(暴力展开或使用接口)。值得注意的是:
1.目录树就在当前页面
2.目录树在iframe中
这两点需要区分对待,但其实除了切换iframe这个步骤外,其他逻辑相同。
3.iframe处理
这个就很简单了,切进去发现不是目录树后切出来,根据其src属性生成后续任务。
4.点击事件与Ajax处理
此处Ajax与点击事件做等同处理,链接中href属性动态生成的也走相同逻辑,将元素xpath与动作作为参数传至后续任务,后续任务进行点击或其他操作。
主要逻辑就在上面了,后面还会写一篇关于selenium的注意事项的文章,踩了不少坑。