当前位置: 首页 > 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生产和消费模式详解及高级应用(并行模式)
  • Hibernate【inverse和cascade属性】知识要点
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • MaxCompute访问TableStore(OTS) 数据
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • mysql常用命令汇总
  • Python进阶细节
  • Spark学习笔记之相关记录
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 写给高年级小学生看的《Bash 指南》
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • ​力扣解法汇总946-验证栈序列
  • #define用法
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • %check_box% in rails :coditions={:has_many , :through}
  • (pojstep1.3.1)1017(构造法模拟)
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (转)JAVA中的堆栈
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .Net Winform开发笔记(一)
  • @Autowired多个相同类型bean装配问题
  • [20161214]如何确定dbid.txt
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • [C++] cout、wcout无法正常输出中文字符问题的深入调查(1):各种编译器测试
  • [IE编程] 如何获得IE版本号
  • [LeetCode]—Longest Palindromic Substring 最长回文子串
  • [macOS] Mojave10.14 夜神安卓模拟器启动问题
  • [svc]ftp协议数据连接的2种模式
  • [svc]对称加密/非对称加密细枝末节-如何做到数据传输的authentication/data integrity/confidentiality(私密)...
  • [VSCode] Shortcuts
  • [Windows编程] DLL_THREAD_DETACH 认识误区
  • [笔记].使用Protues仿真Max7129
  • [导入]php编码规范
  • [多线程]多线程编程需要注意的问题|多进程
  • [翻译]WP7 QuickStart-第八篇-屏幕方向
  • 10代i5主频为什么这么低_再爆料一波11代的测试版处理器,我这边一共收集了3颗...
  • sc start 驱动报错1275 此驱动程序被阻止加载
  • 修复mysql_修复mysql表
  • VS2010中error LNK2001无法解析的外部符号解决方法
  • Windows内核编程(三) 基础概念
  • JAVA8用哪个版本的MYSQL_关于java连接mysql8.0因为版本不匹配报错的那些事
  • MFC扩展DLL添加对话框资源时对话框ID是“未声明标识符”
  • NOIP2001普及组 最大公约数和最小公倍数问题
  • windows 2008 mysql_Windows server 2008 r2上安装MySQL
  • IoSkipCurrentIrpStackLocation与IoCopyCurrentIrpStackLocationToNext区别