👈👈👈 欢迎点赞收藏关注哟
首先分享之前的所有文章 >>>> 😜😜😜
文章合集 : 🎁 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…
实现功能就完成了 ,到了这里我就开始思考 , 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
4.4 机器视觉
Python 对机器视觉的支持也是比较深入的 ,我感觉应该也能满足 RPA 的需求 , 具体可以看这篇 :
总结
RPA 不算一个新概念了 ,很早之前都或多或少有一些企业在实现 ,在 2020 年兴起并且快速发展,直到现在已经是一个很成熟的体系。
说起来它针对的领域很多,但是作用的方面主要是节省重复性的工作 。 不追求性能 ,稳定更重要。
对于需要的功能 ,Python 基本上能找到解决方案 ,我个人Python的能力有限 ,所以方案只有一点参考价值。
如果有机会 ,后续学习 Python 的过程中会尝试实现一个小 Demo。