RPA 实战:让小姐姐填满你的硬盘(上)
某天,我无意逛到某个小网站,如果我不懂代码,想要网站上全部的妹子,我该怎么做?……幸好有她,她好我也好,她就是 RPA – Robotic Process Automation,中文意思是机器人流程自动化,换句话说就是利用机器人技术来实现业务流程的自动化处理。
环境安装
首先打开另一个小网站 – https://www.hwtelcloud.com/products/rpa,下载【设计器】,并进行使用激活;下载【执行器】,让程序自己动;此外还需下载浏览器驱动和安装浏览器插件。关于软件的下载安装等此处就不进行讲解,相信您能搞定!
本大狮发表文章时所用到的软件版本及环境如下:
- WeAutomate Studio(2.14.0)
- WeAutomate Assistant(2.14.0)
- VM: python 3.8.5 64-bit
- Windows Feature Experience Pack 421.16300.0.3
- Google Chrome 91.0.4472.124 64-bit
将近1000页的帮助文档在 WeAutomate Studio 安装目录下:document/RPA_Robot_Development_Guide_zh_cn.pdf
此外还有更多优质的课程尽在华为云学院: https://ilearningx.huawei.cn/portal/courses?q=ANTROBOT
“技术”解析
说到图片,我最先想到的是某度图片,之前通过使用 NodeJS 爬虫爬取过该网站搜索出来的图片,大概的流程如下:
-
输入关键字,
//*[@id="kw"]
这里的 Input 标签就是我们关键字输入的位置。
-
获取图片列表,当我们输入关键字并搜索的结果就呈现为页面的
//*[@id="imgid"]/div/ul/li[1]/div/a/img
,也就是 classname 为main_img
的图片元素
- 滚动窗口,当我们模拟鼠标滚动时,页面会加载更多的图片。
- 图片下载,我们获取到每个图片元素的
src
属性,就是我们最终的图片下载地址。
那么整个流程下来,在 RPA 中我们需要用到哪些控件呢?首先我们要从网页获取图片,打开网页
控件是第一个用到的;其次我们要获取网页的高度并进行滚动、获取页面图片元素及src
属性,我们可以通过执行 js 代码
控件来帮我们完成;此外,涉及的一些流程控制我们必须依赖分支、循环等控件;最后下载图片则通过下载文件
控件实现。
实施过程
RPA 的实施一般遵循下面的生命周期:
RPA 评估
首先 RPA 评估,针对此次我的这个“大胆”的想法,我的整个业务流程完成能够用自动化来实现,当然投资回报率(ROI)对我来说,完全只需投入少量的时间就能获取到海量的数据,理论上是非常划算的。本次实践不对 RPA 工具本身做任何评价,本着新手小白的学习态度,一款好用的强大的称手的 RPA 工具请按照自身的场景去选取,如同技术选型,对开发工具做一定的调研、体验才能更好的选择合适的工具。
RPA 设计
接着 RPA 设计,我们先梳理一下完整的业务流程,细粒度精确到每一个点,比如网页数据怎么获取、图片怎么下载等等,势必会涉及到一些逻辑,比如分支逻辑、循环逻辑;除此之外,我们需要明确每个操作的输入和输出;在实际工作中,我们可能还需形成具体的文档。
RPA 开发
简单梳理完流程之后,开始开发我的第一个 RPA 程序。尽管整个流程梳理起来非常简单,但实际开发的时候,由于对工具、编程语言基础等不熟练,我踩了一个又一个的坑,最终走出了结合 JS 代码以及 NodeJS 爬虫的思路来开发这个图片爬取的 RPA 程序。
-
- 全局变量定义
由于本大狮功力不够,暂时没能实现打开网页之后动态获取跳转的链接,因此我直接使用的输入关键字搜索之后的 url 作为全局变量 url 的值,拼接 keyword 来实现结果页面图片的获取。
名称 | 类型 | 值 | 描述 |
---|---|---|---|
url | String | (根据实际情况填写) | baseurl,用于拼接 keyword 访问结果页 |
keyword | String | (根据实际情况填写) | 关键字,比如"性感美女"、“靓仔” |
height | String | 0 | 初始的窗口高度,用于缓存过程数据 |
num | Number | (根据实际情况填写) | 图片数量,暂未做精确处理,作为退出循环的条件 |
-
- 打开网页
写得比较随意,中文在浏览器地址中可以做 url 编码处理,这里可以引入 python 模块哦!
-
- 获取浏览器窗口高度
建议此操作前先调用控件让浏览器窗口最大化,然后通过 JS 代码获取浏览器窗口高度并赋值给 height
,方便后面的滚动操作。执行 JS 代码
控件是有返回值的,在代码中通过 return
可以返回指定内容。
return document.body.offsetHeight;
-
- 循环操作
此处模拟了 JS 的定时器方法,使用While
来进行滚动操作的循环。假如我想获取 10k 张图片,第一次加载的结果可能才几十张,如果是人工操作的话,我需要不断滚动浏览器以加载获得更多的数据。那机器人是怎么自动化操作呢?我们给它设置一个延时操作,然后调用 JS 代码滚动浏览器,同时更新height
:
let height=@{height}*2;
window.scrollTo(0,height);
return height;
-
- 获取图片链接
同样的通过调用执行 JS 代码
控件来获取图片的链接和数量,为图片下载和退出循环做准备。
let arrs = document.querySelectorAll('.main_img');
let urls = []
for (let img of arrs){urls .push(img.src)}
return urls;
-
- 退出循环
比较预期的图片数量和实际的图片数量,如果图片够了,我们就退出循环,进行下一步操作。
-
- 创建文件夹
这里的步骤非必须,根据实际情况取舍,我这里是简单的尝试并熟悉 RPA 工具;不过逻辑还不够严谨,可以优化的点实在是太多。
-
- 遍历图片链接并下载
“没有什么问题是一个 for 循环不能解决的,如果有,那就两个”,此处能够直接进行循环是因为之前 JS 代码返回的值已经是 list 了,因此将 url 遍历出来调用下载文件控件就能直接下载。
至此,一个简单的图片爬取 RPA 程序已经开发完毕。
RPA 测试
如果是大型的项目,必然会经过单元测试、集成测试等全面的测试历练之后才会发布。而对于此次的 RPA 图片爬取小程序,我只做了简单的调试,理论上调试依旧属于开发阶段,严格来说需要模拟各种场景、各种系统和上下文进行正确性测试等,测试完成后才可以上线。
作为伪测试,我输入华为美女 100 张,结果程序给了我 130 张,XDM 你们说测试通过吗?
RPA 优化
毕竟是 Hello World 级别的程序,出自 HW 攻城狮之手,因此有很多地方需要完善,比如逻辑的严谨性、没有考虑边界、下载的文件名杂乱等。毕竟真实的项目如果是这么个水平,估计…… RPA 的优化可以从最优设计、从性能、从实际业务需求等方面去实施。当然,屏幕前的您一定有自己的优化思路,期待您与我分享!
小结
回到标题,咦,为什么是上篇,难道还有下篇?敬请期待吧!那么上篇讲了哪些知识点呢?首先是 RPA 环境搭建及入门,然后是 RPA 程序开发的套路,接着是网页元素处理、文件下载、如何调用 python 模块、如何调用 JS 等,最后是简单测试及优化建议。感谢阅读,希望能帮到您!
最后,附送几个G的学习资料:
- 点赞
- 收藏
- 关注作者
评论(0)