一、获取DataTable数据比表格元素更稳定
首先聊一下获取Web页面整个table元素和获取单个td值的区别,有些Web页面的表格内容是动态生成的,所以每次刷新页面后按照td元素id去获取元素值有时候会错误,有时候会找不到。找错了导致我们数据采集不准确,找不到则会导致程序运行报错,uipath studio停止运行。
为了让机器人每次都能准确地找到数据,我们可以获取页面上该元素所在table的数据(可以有选择的获取一列或多列),得到DataTable数据,然后再取出目标元素的值。
图:使用DataScraping工具获取Web页面表格的两列数据,列名分别命名为 sum和 left
二、有关DataTable数据获取单个元素的值
对于DataTable如何筛选数据,网上倒是有些帖子,但是对于如何取DataTable数据类型的某个值却找不到资料,后来我找到一个取值方法:DataTable(rownumber)(columnnumber),但是本机安装的uipath studio(19.10.4)无法识别这个方法。DataTable实际还是一个类似二维数组的数据,于是我去找读取Datatable行的方法,在DataTable.Rows()()方法中输入目标元素的下标就可以获取该元素。例如我要获取第2行第1列的数据,我输入DataTable.Rows(1)(0)即可,使用Write Line组件输入DataTable.Rows(1)(0).ToString就可以在控制台中输出。
三、如何在DataTable增加一列数据(增加时间戳字段)
有时候获取的数据要添加一列或者多列,对于DataTable数据我们在入库的时候要记录时间,用来区别什么时候抓取的数据。针对DataTable数据,uipath提供了Add Data Column工具,在工作流中添加该工具即可。
组件配置详细信息如下:ColumnName设置添加列名;DataTable需要添加到哪个DataTable上;TypeArgument设置添加列的数据类型;DeafaultValue默认值,取当先系统的时间。(如果有需要输入的DataColumn类型数据,可在Column中设置。)
四、DataTable和数据库Table字段的映射
将获取的DataTable数据插入都数据库,UIPath可以一次插入整个DataTable,只要保证数据库表的列名和DataTable的列名相同即可。在设置DataTable的列的时候,一定事先要和数据表的字段名保持一致,列名不同,找不到对应的列,插入会报错。
按照此配置,即可完成DataTable的入库流程。