请将题目填写完整
上一单元
单元(共单元)
下一单元

第十六课(05):实战技能3--多层嵌套表格

25分钟




【课程目标】

  • 恭喜你,晋级为RPA高手只差一步之遥! 本节课程讲带大家学习云扩编辑器中选择器定位元素的实际业务中会遇到的经典业务场景~


  • 从Xpath开始,一起挑战下拉框、多选复选框勾选、多层iFrame嵌套网页吧~


  • 最后,我们一起学习一下如何根据实际业务场景把一些复杂的业务流程直接打包成组件给一线业务非RPA开发人员使用哦~ 一起让RPA在业务里RUN起来~



课时内容:



目录:

  • 选择器方法3-“XPath”(课程时长:30分钟)
  • 宝藏网址”云扩RPA闯关”(课程时长:5分钟)
  • 实战技能1--下拉框选项(课程时长:15分钟)
  • 实战技能2--多选复选框(课程时长:15分钟)
  • 实战技能3--多层嵌套表格(课程时长:25分钟)
  • 实战技能4--日期选择控件(课程时长:40分钟)




二、学习内容:


  • 课程简介:实战技能3--多层嵌套表格(课程时长:25分钟)
  • 学习目标:掌握 ★★★
  • 难易程度:较难 ★★★★
  • 讲义下载:文末进群-获取“讲义PPT”




2.1 文档教程


我们在流程开发中往往会遇到web页面的很多table类元素进行处理的问题,一般我们在网页上需要获取的table(例如n*m类型)表格时,我们可以很方便地借助编辑器中的获取结构化数据组件来实现table获取。

但是我们也会遇到多层table嵌套导致无法一次性获取整个table然后进行数据处理的情况,下面我们将对这种情况进行探讨。



重点: 获取结构化数据不成功?

页面看起来是一个表格,实际上网页结构不规则 存在多级层级嵌套 如何解决 ? 应该如何解决?


注意:本节课内容属于高级自动化课程,面向高级RPA实施或企业内部有一定开发代码基础的技术流程开发者。




一、准备工作

  • 准备开发流程的电脑,请打开云扩学院链接查看云扩RPA编辑器运行的硬件&软件要求
  • 打开云扩官网下载编辑器并安装。




二、案例介绍

用云扩RPA来进行多层 table 嵌套的 web 表格处理,表格举例如下:

网页源码:

在上述例子中,假设我们需要获取网页中这个表格的最后一列,如果我们使用获取结构化数据组件来处理,则无法实现整个table数据的正常获取,此时我们就可以使用如下思路来解决问题。




三、操作流程





四、操作步骤


  • 第1步:打开云扩编辑器,新建项目



  • 第2步:添加打开浏览器组件,配置需要处理的网页URL



  • 第3步:添加获取元素组件,获取整个table最外层元素信息







  • 第4步:将获取元素的输出结果赋值给新变量h(选中变量h,按Ctrl+B可以快速自动创建变量h)



  • 第5步:为了更明显地展示从web端获取的数据,这里新建一个datatable,配置一个列(string类型,我们假设只需要获取网页中一列数据),来接收网页table获取的所有结果




  • 第6步:通过C#代码来处理获取table的元素(即变量h)


try
{
  // 使用Html Agility Pack开源组件来进行Html解析
  string htmlCode = (h.GetProperty("innerHTML")).ToString();
  HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
  doc.LoadHtml(htmlCode);
  // 遍历需要获取的信息的节点
  // 此处的SelectNodes中Xpath为页面获取元素的这段源码中,需要获取的节点信息的xpath路径
  // 请实际使用中用谷歌F12+ Ctrl + F在最下面的输入框中进行调试
  foreach (HtmlNode row in doc.DocumentNode.SelectNodes("//table//table//table//tr")) 
  {  
    //将节点信息添加到数组中
    string[] tdArr = row.SelectNodes("td").Select(td => td.InnerText).ToArray();
    // 通过判断条件进行数据信息筛选,此处我们假设我们需要筛选数据内容是字符"2"结尾的内容
    if (Convert.ToInt32(tdArr[0].Substring(tdArr[0].Length - 1)) == 2)
    {
    // 将筛选内容添加到datatable中
    table.Rows.Add(tdArr);
    }    
  }
}  
catch(System.Exception e)
{
  Console.WriteLine(e.Message.ToString());
}





  • 第7步:我们使用组件预览数据表来查看处理结果


至此,从多层嵌套的table中获取不固定数据的流程已开发完成,保存并运行流程并查看“结果对比”:




五、后续操作步骤


我们看到执行过程只是简单的进行对多层table这一段源码进行遍历操作,使用的是节点筛选,当我们这里需要处理多个页面时,只要保证这个table嵌套的架构一致,

那么我们网页中的节点td(也就是说最后一列的数据)可以是动态的,可以是1行数据,也可以是100行数据,我们都可以通过Xpath模糊查询的结果来进行筛选出来。




综合上面所讲的,我们可以发散,这不仅仅是table可以这样操作,我们这个html的思路,可以使用到任何html页面中想爬取的类似结构,例如下图中情况:




六、课后练习





END:

论坛相关讨论

    需要帮助或反馈问题?去云扩论坛参与讨论