当前位置: 首页 > news >正文

(16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)

文章目录

  • 一、 实验平台——UiBot
  • 二、 项目功能与实现
    • 1、项目介绍
    • 2、 项目流程
      • (1) 全局变量设置
      • (2) 页面登录和跳转
      • (3) Excel记录项目名称和个数
      • (4) 搜索并爬取第i个实训项目
      • (5) 新建工作表重命名写入,删除无效列
      • (6) Excel高亮和统计
      • (7) 循环执行(4)-(6)
      • (8) 关闭页面和表格
  • 三、 问题解决
    • 1、 全局变量
    • 2、 插件配置
    • 3、 数据抓取后获得纯字符串
    • 4、 数据抓取不完整
    • 5、 连接线形状

一、 实验平台——UiBot

官网下载链接:https://www.uibot.com.cn/

UiBot是一家机器人流程自动化服务平台,其产品包含创造者、劳动者、指挥官三大模块,用户可通过平台一键录制流程并自动生成机器人,支持可视化编程与专业模式、浏览器、桌面、SAP等多种控件抓取以及C、Lua、Python、.Net 扩展插件及第三方SDK接入,还可对业务与权限进行实时监控调整。

UiBot产品主要包含创造者、劳动者、指挥官、魔法师四大模块,为机器人的生产、执行、分配、智能化提供相应的工具和平台。

  • Creator

创造者即机器人开发工具,用于搭建流程自动化机器人。

  • Worker

劳动者即机器人运行工具,用于运行搭建好的机器人。

  • Commander

指挥官即控制中心,用于部署与管理多个机器人。

  • Mage

魔法师即AI能力平台,为机器人提供执行流程自动化所需的各种AI能力。

二、 项目功能与实现

1、项目介绍

机器人的主要目标是在头歌页面上自动获取学生实训提交情况。

机器人将打开头歌页面,点击我的头像查看课程,进入到《XX课程》。点击进入已截止的实训项目,我的账号可查看到各位同学的实训通关情况。

为了实现对项目列表进行遍历,机器人在已截止页面抓取所有项目名称,由于页面过长无法智能识别并抓取,且提取的数据无法直接转换为字符串。因此,将所有实训项目写入Excel后再读出,在网页搜索栏中依次进行搜索,以遍历所有实训。

在实训详情中将爬取所有同学的提交信息,输出到Excel表格中。一般而言,学生在实训项目截至后应当按时通关,对于异常提交情况,如迟交通关未通关未开启,在Excel中用不同颜色高亮展示,处理过程保留各种异常情况的学生数。

最后,将统计结果写入Excel单元格,抓住未做作业的那一批同学。

image-20220921162027322

​ 最后形成的Excel效果如图所示。

image-20220921162119583

image-20220921162214028

2、 项目流程

(1) 全局变量设置

为了实现在流程图中的数据共享,本项目设置了如下的流程图变量,即全局变量。在运行完整项目时将创建并共享。关于全局变量的设置,可以参考报告中的问题解决-全局变量板块。

  • hWeb:标识机器人所打开的页面。在启动浏览器时产生,通过hWeb实现打开、关闭、切换浏览器及其标签页。

  • TrainName:实训名称,string型。记录所有已截止的实训项目的名称,采用数据抓取的方式获得。

  • TrainNum:实训个数,int型。即TrainName的长度,表示共有多少个已截止的实训需要进行数据采集。

  • ExcelProject:Excel表,用于记录所有实训名。由于抓取到的实训名称无法直接转为字符串,通过Excel表转换,并实现在搜索框中依次搜索内容。

  • Name:代表当前遍历到的实训名称,string型。从ExcelProject中依次获取,以作为搜索框中的输入。

  • CurProject:标记当前遍历到第几个实训,int型。在每次进入流程循环时+1,作为从ExcelProject获取Name的下标。

  • TrainInfo:学生们作业提交的表格信息。从每个实训的作业列表中由数据抓取得到。

  • ExcelProject:Excel表,用于记录所有实训详情。抓取到的原始TrainInfo将存储到该Excel表中,并对表进行新建表、重命名表名、写入区域、删除列、高亮单元格等操作,对每个实训项目新建一个对应名称的工作表,处理数据并高亮异常提交情况。

(2) 页面登录和跳转

image-20220921162253309

image-20220921162309429

在该流程中,机器人主要实现以下几个步骤

  • 进入头歌点击我的头像

机器人将自动打开浏览器,访问网址https://www.educoder.net/,由于在本机电脑上已经自动登录,所以无需再进行登录操作。点击我的头像可直接进入到我的教学课堂内容。

image-20220921162324617

  • 选择课程

选择《大学计算机基础》

image-20220921162400003

  • 查看已截止项目

点击课程后会默认进入实训作业的页面,查看已截止的项目。

image-20220921162450643

(3) Excel记录项目名称和个数

image-20220921162459191

由于之后希望遍历每一个实训项目并爬取数据,于是在该流程块中,希望获取全部实训名称,以便之后依次进入对应的实训页面。但是,直接从网页爬取的数据不是纯字符串,解决这个问题的方法见问题解决的数据抓取后获得纯字符串。

​ 将所有实训名自动保存到实训详情.xlsx

image-20220921162555117

(4) 搜索并爬取第i个实训项目

image-20220921162612415

image-20220921162622841

CurProject标识了当前遍历到第几个实训项目,初始值为0。这部分流程涉及到遍历,在流程块外部实现,流程块内实现该循环的具体内容,即进入第i个实训项目,爬取学生项目完成情况。涉及到以下几个步骤:

  • 获取当前实训项目名

CurProject代表当前实训项目的序号,进入该板块后+1,即从第1个项目开始遍历。

读取实训详情.xlsxSheet1工作表中的A&CurProject单元格的数据,即实训项目名称,如第一个项目为冯诺伊xxxx

  • 搜索项目并进入作业列表

在页面的搜索框中输入项目名称回车,鼠标点击板块,进入该项目的作业列表

image-20220921162723257

  • 抓取页面数据

抓取页面数据,由于页面为表格形式,因此可以快速抓取。设置翻页页数,由于每个实训项目均为同样的学生参与,因此翻页数固定为4。在这里可能会出现数据抓取不完整的问题,解决方案可见问题解决的数据抓取不完整。

同时,为了打开页面时未处于第1页,可以设置页面滚动条,滑到页面选择,选择第1页后再爬取数据。这个操作的增加即可以防止页面错误,也可以防止数据抓取不完整的问题。

image-20220921162807791

image-20220921162816814

(5) 新建工作表重命名写入,删除无效列

image-20220921162827725

image-20220921162834756

​ 对于不同的实训任务,将在Excel中用不同的工作表进行存储,表名即为实训名,因此需要进行以下几个步骤。

  • 创建新的工作表并重命名

image-20220921162854494

  • 写入数据

image-20220921162919290

  • 删除无用列

此时会发现有许多列的数据并没有起到作用,因此设置删去这些列。

image-20220921162942821

(6) Excel高亮和统计

image-20220921162952823

image-20220921163002362

image-20220921163011177

​ 由于学生的提交情况分为按时通关迟交通关未通关未开启四种情形,其中后三种被看作是异常情况,需要进行记录和统计,分别用Late、Unsub和Unstart来记录。

当数据完成写入后,遍历每一行数据,查看每位同学对应的作业状态。根据作业状态(IsSubmit)进行条件判断,若为异常状态,则用对应单元格颜色和文字颜色高亮展示,并将对应变量的数值+1。

最后,在该工作表的J1:K4的位置分别列出各项异常情况的统计值。

由于要进入下一次循环,因此我们需要关闭当前标签页(即关闭第i个项目的提交详情界面)。

image-20220921163042100

image-20220921163121519

(7) 循环执行(4)-(6)

image-20220921163129089

image-20220921163140469

循环条件:CurProject>=TrainNum。其中CurProject代表当前遍历到的项目序号,TrainNum代表实训项目总数。

即对于每一个项目,都会进行搜索操作,搜索得到结果后,自动点击进入该实训项目,爬取学生的提交情况。在Excel中创建新的工作表,命名为该实训项目名称,并写入数据、删除无用数据,对异常情形进行高亮和统计操作,可视化展示。

(8) 关闭页面和表格

在实训项目全部遍历完毕后,关闭标签页和表格,流程结束。

image-20220921163151692

三、 问题解决

1、 全局变量

问题

​ 在流程图中,各个板块之间实现自己的主要功能,但是存在一些数据交互和共用的功能,如果在每个流程块输出部分变量,在下一个流程块接接收的话,变量传递会变得非常繁琐。观看旧版教学视频只发现了这种传递方式。【参考https://forum.uibot.com.cn/thread-4215.htm】

解决方案:

​ 但是新版的开发者指南里提供了全局变量、循环逻辑和流程块的一些相关操作。【参考初级开发者指南-流程和任务管理】,于是可以设置全局变量,板块内的操作会为变量附上新的值,方便流程间的数据传递。

2、 插件配置

问题

​ 在项目流程的页面登录和跳转的步骤中,会发现设置用Chrome浏览器打开指定链接https://www.educoder.net/时,机器人能实现打开Chrome,但无法正确跳转页面。

解决方案:

​ 需要安装Chrome插件,在首页-工具-Chrome扩展中安装,并在浏览器设置-扩展程序中启用扩展程序。其他浏览器也可以对应安装扩展程序。

image-20220921163245092

image-20220921163255268

参考链接:https://forum.uibot.com.cn/thread-2098.htm

3、 数据抓取后获得纯字符串

问题

​ 在项目流程的Excel记录项目名称和个数的步骤中,希望获取各实训项目的名称字符串,以实现遍历点击。但是会发现数据抓取的结果为列表,而每一项的输出也是一个列表。

​ 爬取得到的数据如下图所示,并不是纯字符串,不符合预期。

image-20220921163308021

image-20220921163328463

解决方案:

​ 我想到的方案是先将数据写入Excel。再对Excel内容进行读取。此时读取得到的字符串为纯字符串,而不是一个列表形式。

image-20220921163341361

image-20220921163403970

4、 数据抓取不完整

问题

​ 在项目流程的爬取第i个实训项目的步骤中抓取数据时,有时会发现数据抓取不完全。存入Excel表后如下图所示。

image-20220921163422753

解决方案:

出现这种问题很大可能是页面延迟问题,数据未来得及加载就已经进入到下一个步骤,解决的关键在于设置延迟。可以通过以下方案解决

  • 为前一个动作增加延迟

将前一个动作的执行后延时时间增加,可设置为800-1000。

image-20220921163430622

  • 设置延时

插入延时命令。设置动作运行完的等待时间。

image-20220921163437160

5、 连接线形状

问题

​ 在流程图绘制过程中,发现连接线常常很混乱,无法按照想要的方式进行连接。

image-20220921163444637

解决方案:

​ 按住Ctrl+鼠标左键可以在连接线上加点,拖动点使得连接线合理。

image-20220921163503245

相关文章:

  • Problem A: 两个有序链表序列的合并
  • 【Web前端】CSS3新特性
  • 一文读懂为什么需要跨链?跨链是什么?跨链实现技术?
  • 嵌入式怎么自学 大牛教你方法
  • CSDN编程挑战赛第六期——Python题解
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • 旋转矩阵转欧拉角,转四元数
  • nginx实现双向认证
  • 基于GStreamer和FFmpeg的OpenCV安装和使用
  • 高项 11 风险管理
  • 字节12年测试经验,从零基础软件测试到功能测试到自动化测试到测试开发,我整理了这二份8000字入门到入职的学习指南
  • SQL 为什么历经半个世纪却经久不衰?
  • 【数据结构初阶】八大排序(三)——归并排序计数排序
  • VI 使用技巧
  • Disruptor生产和消费模式详解及高级应用(并行模式)
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • [译]CSS 居中(Center)方法大合集
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • input实现文字超出省略号功能
  • JS基础之数据类型、对象、原型、原型链、继承
  • Next.js之基础概念(二)
  • Redis在Web项目中的应用与实践
  • SSH 免密登录
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • vue.js框架原理浅析
  • 后端_MYSQL
  • 将回调地狱按在地上摩擦的Promise
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 深入浅出webpack学习(1)--核心概念
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 原生js练习题---第五课
  • postgresql行列转换函数
  • ​iOS安全加固方法及实现
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • # .NET Framework中使用命名管道进行进程间通信
  • # include “ “ 和 # include < >两者的区别
  • $forceUpdate()函数
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (ZT)薛涌:谈贫说富
  • (编译到47%失败)to be deleted
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (四)c52学习之旅-流水LED灯
  • (转)重识new
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .Net环境下的缓存技术介绍
  • @Data注解的作用
  • @Mapper作用
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • [Angularjs]ng-select和ng-options