网页相似元素循环常见场景及解决方案

打开了新标签页 或 网页没有刷新

如果两次循环之间原网页没有刷新行为,可以直接循环相似元素,在循环体中进行想要的操作。

如果对一个元素操作后,网页打开了新标签页,用获取已打开的网页对象指令获取新打开的网页对象,保存为一个和原网页对象不同名的变量,对这个新网页操作后,关闭新网页,循环则会继续对原网页下一个元素操作。

示例

以百度首页为例,对所有热搜循环点击:

相似元素校验:

流程截图:

执行效果:

循环点击所有热搜条目,关闭新打开的网页。

网页有刷新行为

在操作时原网页刷新了,导致软件找不到刷新前获取的相似元素,一般出现在循环中。

解决方案:改用For次数循环循环网页相似元素,在循环内重新获取相似元素列表,按For次数循环得到的下标去取相似元素列表中的项来操作。


如果网页有刷新行为,而且刷新后操作过的元素会从网页上消失,不再能校验到,可以考虑点击固定位置项,比如第一项。

以阿里发票为例,想要批量同意发票开具,但是页面上“同意”元素在点击后会变为“已准”,同意元素的个数会在点击同意按钮后改变。

解决方案:无限循环中每次都点列表第一个元素,如果获取到的列表的长度为 0,则退出循环。

循环需要两个相似元素列表

两个相似元素列表长度相同

场景描述:

需要在来源的相似元素列表中判断,需要求本页上来源是下单的申请的金额总和。

思路:

两个相似元素列表的长度总是相同,可以用下标索引关联两个列表的对应位置的项。

两个相似元素列表长度不同

场景描述:

需要抓取所有状态是“已取消”的发票抬头,但是不是所有申请的状态都是已取消,导致用下标索引对应元素时可能会错位。

思路:

状态和对应的发票抬头,一定在一个父元素下。对这个父元素相似元素循环,通过关联父元素找到状态和发票抬头的元素文本,记录在发票抬头列表中。

但不是所有父元素都包含“已取消”这个按钮,这时就需要判断一下跳过这个父元素。

元素捕获:

父元素

“已取消”元素

发票抬头元素

解决方案:

第四行获取元素对象指令,高级中设置超时时间为 2 秒。

执行效果:

打印出了所有状态是已取消的发票抬头。


有时候同一行的元素之间可以通过找关联元素来找到,在上一个例子里打开 F12,发现可以这样通过发票抬头元素找到包含已取消按钮的元素。如何用 F12 找到页面上元素对应的代码

注意不包含已取消按钮的行可能没有第二个 span 元素,继续向下找元素可能会报错未找到控件,无法判断文本,其实在上一级 span 就可以获取到已取消的文本。这个元素在所有行都是通用的。

执行效果和 ① 相同。

TIPS:如何用 F12 找到页面上元素对应的代码

在页面上按 F12 打开开发者工具,点击元素(Element)标签页:

点击下方的在网页中选择元素按钮:

把鼠标移动到需要定位的元素上并点击,这个元素的源代码会自动高亮:

问题没有解决?去社区提问 all right reserved,powered by Gitbook

results matching ""

    No results matching ""