当前位置: 首页 > 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生产和消费模式详解及高级应用(并行模式)
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  •  D - 粉碎叛乱F - 其他起义
  • gitlab-ci配置详解(一)
  • mysql innodb 索引使用指南
  • supervisor 永不挂掉的进程 安装以及使用
  • vue-cli3搭建项目
  • vue自定义指令实现v-tap插件
  • 分享几个不错的工具
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 用Python写一份独特的元宵节祝福
  • 云大使推广中的常见热门问题
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #pragma once与条件编译
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (C语言)逆序输出字符串
  • (MATLAB)第五章-矩阵运算
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)linux下的时间函数使用
  • (转)可以带来幸福的一本书
  • .NET CORE 第一节 创建基本的 asp.net core
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .net MVC中使用angularJs刷新页面数据列表
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .NET大文件上传知识整理
  • .NET建议使用的大小写命名原则
  • .NET企业级应用架构设计系列之应用服务器
  • .Net组件程序设计之线程、并发管理(一)
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600
  • [17]JAVAEE-HTTP协议
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [C#]winform使用引导APSF和梯度自适应卷积增强夜间雾图像的可见性算法实现夜间雾霾图像的可见度增强
  • [E链表] lc83. 删除排序链表中的重复元素(单链表+模拟)
  • [Gym-102091E] How Many Groups