RPA 小实践 :用 RPA 收录掘金优质文章

6,379 阅读5分钟

👈👈👈 欢迎点赞收藏关注哟

首先分享之前的所有文章 >>>> 😜😜😜
文章合集 : 🎁 juejin.cn/post/694164…
Github : 👉 github.com/black-ant
CASE 备份 : 👉 gitee.com/antblack/ca…

一. 前言

上一次接触自动化是为了做一个跨端自动登录的功能,后面很久就没在生产上尝试过了。

不过很多年前尝试过一次京东商品抢购的自动化 ,基于 Java 实现的 ,效果很不理想。

然后最近发现 ,这东西已经在很多企业里面大批量普及了 , 方案很成熟 ,效果也很好。

秉着学习一下的思路 ,进行了一个简单的尝试。

二. 实现

我这里选择的 RPA 是影刀 ,在里面我实现了以下功能 :

  • 👉 S1 : 打开了一个 Excel ,用于存放我下载的文档 (同时可以通过这个 Excel 实现文档去重)
  • 👉 S2 : 循环了后端页面 ,抓取每个文档信息
  • 👉 S3 : 浅显的认为文章够长 ,字数够多的为我期望看的文档
  • 👉 S4 : 将文档保存在 Excel 中 ,后续业余时间可以选择性的看
  • PS :其实还需要实现界面下滑/点赞分析等最好 ,这里偷懒没做

不知道能不能打开 ,分享一下 @ api.winrobot360.com/redirect/ro…

image.png

image.png

实现功能就完成了 ,到了这里我就开始思考 , RPA 能做什么 以及 它大概是怎么实现的呢?

三. 思考

从这个软件里面就不难看出 , 现在生产级 RPA 工具的各项功能已经非常完善。

来看一下涉及到哪些功能 :

  • 自动化 : 包括桌面软件的自动化 ,网页自动化 和 手机自动化 , 键鼠自动化
  • 数据抓取和处理 : 最常见的场景就是抓取到的数据进行分析和处理,导出为 Excel
  • 机器视觉 :实现图像自动识别与处理
  • 脚本语言 : 支持使用Python语言编写自动化脚本

一般以上四个功能就足够大部分的企业使用了 ,核心的功能就是自动化和数据处理. 视觉和脚本主要是为了弥补一些特殊场景下的问题。

在大多数场景下面 ,主要是为了解决一些重复性的问题 , 比如 :

  • 爬取网络上的销售数据和竞品信息 ,输出表格给业务端做分析
  • 一些重复性的事务/活动/点击/创建/发布行为等 ,一次性创建上千条信息

从整体的效果看,对工效的提升还是很大的。

四. 技术衍生

那么接下来在这里放开思路想一想 ,有哪些技术是可以实现这些的 :

PS :网上找了很久 ,这方面的方案信息很少 , 只能靠推测 ,对此不负责,欢迎讨论

4.1 桌面端

RPA 工具必然需要和桌面应用打交道的 ,由于其实现了桌面自动化和网页自动化 ,所以不能通过 Web 服务端的方式去实现 。 加上要实时读取 Excel 等复杂的功能 ,桌面端就是一个很好的选择。

在实现上 ,影刀应该使用的是 C++ , 相比 Electron 这些其他语言实现的更高一层应用 ,C++ 应用在性能和桌面支持度上面都会更优秀。

  • 核心 : 需要和桌面应用进行交互 ,需要调用系统级API

4.2 模拟自动化

参考影刀 ,他将自动化的流程分为了两个部分 :

  • 步骤一 : 通过浏览器插件获取要关注的对象
  • 步骤二 : 在内置/外部浏览器中围绕这些对象进行数据采集/操作

手机和桌面应用的自动化我完全不了解 ,只能靠微薄的知识体系来试图思考一下网页自动化的实现 :

这些在 Python 里面都有解决方案 ,例如 webbrowser / selenium / pyppeteer

S1 : 打开浏览器进入特定的页面

PS : 没错 ,就是按照自动化测试的思路想的。

import asyncio
from pyppeteer import launch

async def main():

    # Windows 下 Chrome 浏览器的默认路径
    browser_path = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"

    # 启动浏览器
    # 将 headless 设置为 False 以显示浏览器窗口
    browser = await launch(executablePath=browser_path, headless=False)
    # 打开一个新页面
    page = await browser.newPage()
    # 导航到指定的 URL
    await page.goto('https://juejin.cn/backend')

# 运行异步任务
asyncio.get_event_loop().run_until_complete(main())

S2 : Cheome 中采集对象

也就是元素捕获的功能 ,捕获一个页面元素为对象 ,后面执行 RPA 的时候就会参考这个元素查询对应的其他元素,

    # 获取元素的信息
    element = await page.querySelector('h1')
    element_text = await page.evaluate('(element) => element.textContent', element)
    bounding_box = await element.boundingBox()
    
    # 创建要保存的信息字典
    element_info = {
        'text': element_text,
        'bounding_box': bounding_box
    }
    
    # 保存到 JSON 文件
    with open('element_info.json', 'w') as f:
        json.dump(element_info, f)

S3 : 使用元素对象

 # 加载保存的元素信息
    with open('element_info.json', 'r') as f:
        element_info = json.load(f)
        
 # 寻找具有相同文本内容的元素
    elements = await page.querySelectorAll('h1')  # 假设我们在寻找 h1 标签
    for element in elements:
        text = await page.evaluate('(element) => element.textContent', element)
        if text == element_info['text']:
            print(f"Found matching element: {text}")
            # await element.click()
            break

S3 : 抓取网页里面的信息

这一块就是爬虫领域的东西了 ,网页分析和数据提取。 这里就不细说了。

4.3 数据收集

简单点说 ,就是导出数据到 Excel ,openpyxl 就是一个很好的框架 :

from openpyxl import Workbook

# 创建一个新的工作簿
wb = Workbook()
ws = wb.active

# 写入标题行
ws.append(['标题', '文章'])

# 写入数据行
data = [
    ['立个Flag', 'https://juejin.cn/post/6941642435189538824'],
    ['志字辈小蚂蚁', 'https://juejin.cn/user/3790771822007822/posts'],
]

for row in data:
    ws.append(row)

# 保存工作簿到文件
wb.save('output.xlsx')

👉 看起来效果还行 ,采集的数据可以导出到 Excel

image.png

4.4 机器视觉

Python 对机器视觉的支持也是比较深入的 ,我感觉应该也能满足 RPA 的需求 , 具体可以看这篇 :

快跟上 ,和我一起入门计算机视觉

总结

RPA 不算一个新概念了 ,很早之前都或多或少有一些企业在实现 ,在 2020 年兴起并且快速发展,直到现在已经是一个很成熟的体系。

说起来它针对的领域很多,但是作用的方面主要是节省重复性的工作 。 不追求性能 ,稳定更重要。

对于需要的功能 ,Python 基本上能找到解决方案 ,我个人Python的能力有限 ,所以方案只有一点参考价值。

如果有机会 ,后续学习 Python 的过程中会尝试实现一个小 Demo。