Loading...
墨滴

胡琦

2021/07/15  阅读:56  主题:全栈蓝

RPA 实战:让小姐姐填满你的硬盘(上)

RPA 实战:让小姐姐填满你的硬盘(上)

某天,我无意逛到某个小网站,如果我不懂代码,想要网站上全部的妹子,我该怎么做?……幸好有她,她好我也好,她就是 RPA -- Robotic Process Automation,中文意思是机器人流程自动化,换句话说就是利用机器人技术来实现业务流程的自动化处理。

环境安装

首先打开另一个小网站 -- https://www.hwtelcloud.com/products/rpa,下载【设计器】,并进行使用激活;下载【执行器】,让程序自己动;此外还需下载浏览器驱动和安装浏览器插件。关于软件的下载安装等此处就不进行讲解,相信您能搞定!

RPA 实战图片爬取
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
RPA 实战图片爬取
RPA 实战图片爬取

将近1000页的帮助文档在 WeAutomate Studio 安装目录下:document/RPA_Robot_Development_Guide_zh_cn.pdf

RPA 实战图片爬取
RPA 实战图片爬取

此外还有更多优质的课程尽在华为云学院: https://ilearningx.huawei.com/portal/courses?q=ANTROBOT

“技术”解析

说到图片,我最先想到的是某度图片,之前通过使用 NodeJS 爬虫爬取过该网站搜索出来的图片,大概的流程如下:

  1. 输入关键字,//*[@id="kw"]这里的 Input 标签就是我们关键字输入的位置。
RPA 实战图片爬取
RPA 实战图片爬取
  1. 获取图片列表,当我们输入关键字并搜索的结果就呈现为页面的//*[@id="imgid"]/div/ul/li[1]/div/a/img,也就是 classname 为 main_img 的图片元素 RPA 实战图片爬取

  2. 滚动窗口,当我们模拟鼠标滚动时,页面会加载更多的图片。 RPA 实战图片爬取

  3. 图片下载,我们获取到每个图片元素的 src 属性,就是我们最终的图片下载地址。

RPA 实战图片爬取
RPA 实战图片爬取

那么整个流程下来,在 RPA 中我们需要用到哪些控件呢?首先我们要从网页获取图片,打开网页控件是第一个用到的;其次我们要获取网页的高度并进行滚动、获取页面图片元素及src属性,我们可以通过执行 js 代码控件来帮我们完成;此外,涉及的一些流程控制我们必须依赖分支、循环等控件;最后下载图片则通过下载文件控件实现。

RPA 实战图片爬取
RPA 实战图片爬取

实施过程

RPA 的实施一般遵循下面的生命周期:

RPA 实战图片爬取
RPA 实战图片爬取

RPA 评估

首先 RPA 评估,针对此次我的这个“大胆”的想法,我的整个业务流程完成能够用自动化来实现,当然投资回报率(ROI)对我来说,完全只需投入少量的时间就能获取到海量的数据,理论上是非常划算的。本次实践不对 RPA 工具本身做任何评价,本着新手小白的学习态度,一款好用的强大的称手的 RPA 工具请按照自身的场景去选取,如同技术选型,对开发工具做一定的调研、体验才能更好的选择合适的工具。

RPA 设计

接着 RPA 设计,我们先梳理一下完整的业务流程,细粒度精确到每一个点,比如网页数据怎么获取、图片怎么下载等等,势必会涉及到一些逻辑,比如分支逻辑、循环逻辑;除此之外,我们需要明确每个操作的输入和输出;在实际工作中,我们可能还需形成具体的文档。

流程图
流程图

RPA 开发

简单梳理完流程之后,开始开发我的第一个 RPA 程序。尽管整个流程梳理起来非常简单,但实际开发的时候,由于对工具、编程语言基础等不熟练,我踩了一个又一个的坑,最终走出了结合 JS 代码以及 NodeJS 爬虫的思路来开发这个图片爬取的 RPA 程序。

    1. 全局变量定义

由于本大狮功力不够,暂时没能实现打开网页之后动态获取跳转的链接,因此我直接使用的输入关键字搜索之后的 url 作为全局变量 url 的值,拼接 keyword 来实现结果页面图片的获取。

名称 类型 描述
url String (根据实际情况填写) baseurl,用于拼接 keyword 访问结果页
keyword String (根据实际情况填写) 关键字,比如"性感美女"、“靓仔”
height String 0 初始的窗口高度,用于缓存过程数据
num Number (根据实际情况填写) 图片数量,暂未做精确处理,作为退出循环的条件
image
image
    1. 打开网页

写得比较随意,中文在浏览器地址中可以做 url 编码处理,这里可以引入 python 模块哦!

image
image
    1. 获取浏览器窗口高度

建议此操作前先调用控件让浏览器窗口最大化,然后通过 JS 代码获取浏览器窗口高度并赋值给 height,方便后面的滚动操作。执行 JS 代码控件是有返回值的,在代码中通过 return 可以返回指定内容。

return document.body.offsetHeight;
image
image
    1. 循环操作

此处模拟了 JS 的定时器方法,使用While来进行滚动操作的循环。假如我想获取 10k 张图片,第一次加载的结果可能才几十张,如果是人工操作的话,我需要不断滚动浏览器以加载获得更多的数据。那机器人是怎么自动化操作呢?我们给它设置一个延时操作,然后调用 JS 代码滚动浏览器,同时更新height

let  height=@{height}*2;
window.scrollTo(0,height);
return height;
image
image
    1. 获取图片链接

同样的通过调用执行 JS 代码控件来获取图片的链接和数量,为图片下载和退出循环做准备。

let arrs = document.querySelectorAll('.main_img');
let urls = []
for (let img of arrs){urls .push(img.src)}
return urls;
image
image
    1. 退出循环

比较预期的图片数量和实际的图片数量,如果图片够了,我们就退出循环,进行下一步操作。 image

    1. 创建文件夹

这里的步骤非必须,根据实际情况取舍,我这里是简单的尝试并熟悉 RPA 工具;不过逻辑还不够严谨,可以优化的点实在是太多。 image

    1. 遍历图片链接并下载

“没有什么问题是一个 for 循环不能解决的,如果有,那就两个”,此处能够直接进行循环是因为之前 JS 代码返回的值已经是 list 了,因此将 url 遍历出来调用下载文件控件就能直接下载。 image

至此,一个简单的图片爬取 RPA 程序已经开发完毕。

RPA 测试

如果是大型的项目,必然会经过单元测试、集成测试等全面的测试历练之后才会发布。而对于此次的 RPA 图片爬取小程序,我只做了简单的调试,理论上调试依旧属于开发阶段,严格来说需要模拟各种场景、各种系统和上下文进行正确性测试等,测试完成后才可以上线。 作为伪测试,我输入华为美女 100 张,结果程序给了我 130 张,XDM 你们说测试通过吗? image

RPA 优化

毕竟是 Hello World 级别的程序,出自 HW 攻城狮之手,因此有很多地方需要完善,比如逻辑的严谨性、没有考虑边界、下载的文件名杂乱等。毕竟真实的项目如果是这么个水平,估计…… RPA 的优化可以从最优设计、从性能、从实际业务需求等方面去实施。当然,屏幕前的您一定有自己的优化思路,期待您与我分享!

小结

回到标题,咦,为什么是上篇,难道还有下篇?敬请期待吧!那么上篇讲了哪些知识点呢?首先是 RPA 环境搭建及入门,然后是 RPA 程序开发的套路,接着是网页元素处理、文件下载、如何调用 python 模块、如何调用 JS 等,最后是简单测试及优化建议。感谢阅读,希望能帮到您! 最后,附送几个G的学习资料:

https://ilearningx.huawei.com/portal/courses?q=ANTROBOT

如果您对本文有任何意见,欢迎与我联系,公众号:胡琦, Wechat: Hugi66

胡琦

2021/07/15  阅读:56  主题:全栈蓝

作者介绍

胡琦