近期在写应用获取数据或者定位元素的时候遇到过较多卡点:有获取方式比较复杂的、有无法通过某一元素关联到同一行的其它列元素的、有要逐页获取数据但是在翻页时数据加载失败的......
在碰到种种卡点后,也找到了一些对应的解决方法,在这里给大家分享一下。同时也是抛个砖引个玉,看看其他小伙伴们有没有新解决思路。
因为在课程中有详细的介绍,所以这里我们不再做演示。
简单介绍说明一个注意事项:在某些场景下,比如拼多多商家平台的活动详情界面、一些退货退款的处理界面、钉钉的审批申请界面,在从头往下处理数据的时候,每处理完一条会消失一条,导致后面的数据往前顶替,这时候使用循环相似元素组去处理的话,会报错显示找不到目标元素。
当遇到这种情况的时候,我们可以选择从后往前去处理数据的方式,也可以选择先把唯一标识性的单号获取下来,再通过逐条搜索处理的方式。


使用批量数据抓取指令去抓取数据是很便捷的,但是也有一些限制需要注意,在这里我们不做详细介绍。
这里主要介绍另一个作用,在有类似合并单元格的数据情况下,我们可以通过批量数抓取指令,去实现快速填充数据的目的。







在某些无法捕获到相似元素组、无法使用父子元素关联、懒加载需要边获取数据边滚动页面的场景,可以结合元素本身的定位规律,通过全局变量传参的方式去控制元素的位置。



1)首先捕获左边区域的其中一个单元格元素,在编辑界面可以看到某个标签下的属性是可以代表数据所在行数的。比如aria-rowindex属性,当值为2时,定位的就是第二行,当值为3时,定位的就是第三行。

2)同样的,我们在下一个标签下,也能找到可以代表数据所在列数的属性。比如aria-colindex属性,当值为4时,定位的就是第四列,当值为3时,定位的就是第三列。结合上面的aria-rowindex,就可以通过行和列去定位到某一个具体的单元格。

3)接着捕获右边区域的一个单元格元素,可以发现其实也是有类似的结构,可以通过aria-rowindex属性和aria-colindex属性去控制行和列。

4)因此,我们可以通过同时修改几个元素内的aria-rowindex属性值、固定aria-colindex属性值,来达到获取同一行各列数据的目的。修改的方式是创建一个全局变量,然后传入到对应的属性值中。


5)结合For次数循环,我们就可以做到遍历每一行,提取同一行上的每一列数据。


6)关于For次数循环的结束数,可以通过获取界面内的“总计”元素来做为标准。同时也可以在程序内加上随着行数增加而滚动界面的操作,以及可以在提取到数据后,对预算元素进行点击、输入等操作。




在某平台上批量抓取数据,可以使用循环相似元素组提取、也可以用批量数据抓取,但是需要翻页。在数据总共有300多页的情况下,可能翻页到一半就会出现数据加载失败的问题,导致要重头翻页直到续上原先的数据再继续抓取,步骤比较麻烦,甚至可能有翻不回来的现象。
这时候为了能够稳定获取到数据,就可以使用Http请求来一口气抓取数据。
1)先打开网页的检查界面,再切换到Network标签栏。

2)刷新页面,可以看到加载了很多请求信息。

3)在检查界面按ctrl+f,搜索表内的某一数据,快速定位请求。可以根据Response栏内的数据验证定位是否正确。

4)Header栏内有请求链接、请求方式、请求头数据,Payload栏内有请求体数据,可以先获取请求链接,再进行一次定位。

5)右键请求,拷贝Http请求报文。

6)在影刀中使用Http请求指令,点击只能识别填入,粘贴刚刚拷贝的报文,可以自动填写对应的请求头和请求体内容。


7)运行后就可以拿到请求结果数据。

8)再加工做一下数据提取。关于这一步可以根据学习视频来了解如何实现:https://www.bilibili.com/video/BV1hg41127Xg?p=4&vd_source=d416d54b7f3d66f169f8557ab8569d1b


9)一般来说,在请求体中会有2个字段对应的是页数和数据行数,比如现在的page字段和rows字段,所以可以通过调整这2个字段的值来一次性请求全部数据,或者循环分页的提取数据。


以上就是近期收获的4种技巧,我自己用得比较多的还是变量传参那一套,操作起来会比较灵活。
接下来就欢迎其他同伴分享一些你自己的操作思路啦~