前言

在小红书和公众号上,连续发表了几篇关于 Automa 的笔记,许多朋友从后台,加我的微信好友,表达了对 automa 的喜欢。

Automa 这个开源项目,发布有两年多,历经多次特性更新,更好用了。

star-history-2024126

RPA

说到自动化,很多朋友提到 RPA。但我还没有深入地用过,一款 RPA 软件。印象里,是桌面端,各个应用,进程捕捉、窗体捕捉、按钮点击、应用唤醒,等等。

如果那些是 RPA 的话,那么 Automa 就完全不是 RPA。

Automa 是浏览器插件,所有的操作,都基于浏览器 API。所以,Automa 无法拉起桌面窗口,比如记事本、便笺。TA 无法操作,除了浏览器之外,任何的应用。

RPA 可以被称为第三方辅助,而 Automa 则是单纯的浏览器操作。

小红书笔记

我在社区看到,有博主用 RPA 软件,小红书后台数据,提取页面的笔记数据。但在浏览器内,用 automa 操作,不是更原汁原味么。所以,写了这个插件工具。

1,页面分析

首先登录小红书后台,下面这个是笔记管理页面的链接:

https://creator.xiaohongshu.com/creator/notes

右边部分,顶部是曲线图,账号的总体统计。下方就是全部的笔记列表。带的有分页,不同账号,笔记数量不同,页码也不同。这里要重点处理。

2,Automa实现

下面,我们使用 Automa 实现提取流程,同时作为 Automa 的学习入门教程。

2.1 新窗口打开

为了与其他浏览器窗口区别,使用”新建窗口“模块。

然后,打开一个新tab页,地址填入上面的笔记列表。

2.2 分页元素存在

这个页面,底部有分页结构。为了翻页,确保分页元素存在。使用 “元素存在”模块,保证页面加载完成。

使用CSS选择器,确定元素,分析页面得到,分页数据的父级元素,类名是 “page-settings”。

2.3 总页数

循环的方式有很多,页面分页条,是动态变化的。有的账号,可能发表了上百页笔记。识别页码,不太稳定。经过测试,默认每页 12 个笔记,使用总页数进行循环。

不巧的是,页面返回的是 共 173 条,15 页,这样的数据。我们仅需要 15 这个数据。使用现有模块,比如:“属性值”,“获取文本”,拿到的都是这个内容。所以需要提取。

使用 JavaScript 模块,使用 JavaScript 获取元素,文本,提取值。

需要大家有 JavaScript 的基础,语法,数据类型,DOM 知识。下面是获取元素的文本内容:

const itm = document.querySelector(".page-settings");
const content = itm.innerText.replaceAll(" """).replaceAll("n""");
console.log("pure content", content);

文本内,除了有 2 个数字,其他的内容,都不需要。写一个助手函数:

function extractNumbers(input) {
    const pattern = /共(d+)条,(d+)页/;
    if (!pattern.test(input)) {
        throw new Error('Input string does not match the expected format');
    }
    const matches = input.match(pattern);
    return {
        totalNumparseInt(matches[1], 10),
        totalPageparseInt(matches[2], 10)
    };
}

使用了正则表达式,d+ 提取数字。拿到数字之后,要提供给 Automa 其他的块使用。使用内置的 automaSetVariable 方法,创建新变量,给变量赋值。

automaSetVariable('totalNum', totalNum);
automaSetVariable('totalPage', totalPage);

2.4 准备表格 Table

打开新标签后,是第一页数据。我们先把这一页数据,提取出来。多个循环,可以使用变量存储,但不太直观,只能在日志内查看。

既然最终要导出表格,索性就建一个表格,先把流程内的数据,存储到表格。最后一下子导出。

上面的表格字段,名字可以随便起。在流程里,哪个值,存到表格的哪个字段,对应好就行。

2.5 获取页面

F12,在 Elements 里,用鼠标挨个选中,分析页面内的元素。

上图圈出来的,就是笔记的列表。有特定的css类名,使用这个筛选就好了。但是,每一个笔记卡片,有标题,有发布时间,有点赞、收藏、涨粉量。每个都是不同的元素。

在大循环里,挨个遍历笔记卡片;每个小卡片,提取内容。而赞藏量,元素是这样的。

分成了两个 ul 无序列表,每个列表里,有多个 li 元素。用现有模块,实现起来,没那么灵活。所以,还是用 JavaScript 块实现。

使用 JavaScript 提取 DOM 内的元素,并格式化为 []Object。这个数组,就是每页的原始数据。格式如下:

[
    {
        "title":"笔记标题",
        "pubAt":"2024-01-02",
        "views":2328,
        "thumbs":50,
        "favs":42,
        "comments":12,
        "shares":9,
        "fans":21
    }
]

在块内,把这个数组,使用 automaSetVariable,赋值给新的变量。下一节,存表要用到。

2.6 存表

把提取好的页面数据,存到表格 Table 内。要用到 “循环数据“、“插入数据”、“循环断点”三个模块。

把上一个块得到的 currentRows 变量里的数组,依次循环:

循环需要添加”循环断点“,不然,只会循环一次,就通过了。这一点,用的时候,一定要注意。

循环内,获取每次循环的元素的值,使用全局变量 loopData 获取。

对于上述的 JSON 数据,每个元素,是一个对象。有 title、pubAt 等属性。那么,在循环体内,获取其值,就是上图格式。

2.7 下一页

上面的步骤,已经完成了一个页面的流程。数据拿到了,也存表格了。下面的,无非是对之前流程的重复。

页面之间,要有个随机延迟。Automa 生成随机整数,有个小技巧。这个表达式,是内置支持的,但文档里没有。

点击下一页,加载下一页内容。使用“点击元素”模块。下一页按钮,是动态变化的。使用 CSS 选择器,无法在切换下一页的时候,始终选中。所以,要使用功能更强的 XPath 方式。

2.8 循环 – 导出Excel

在 2.3 节,确定了总页数 totalPage,减去第一页,一共需要循环 totalPage -1次,就完成了。

使用 “重复任务”模块,设置循环的次数为 totalPage - 2次。这里,有一个小提示。“重复任务”模块,是先循环,再判断。

循环任务结束后,所有页面完成。使用“导出数据”模块,把当前流程内,表格的数据,导出为 CSV逗号分隔符,用 Excel 直接打开)。

知识点总结

上述工作流的搭建,用到了许多 Automa 的特性。要学会灵活掌握,才能熟练地搭建。这里有一些小提示,要反复练习。

  • • 元素存在:页面加载完成,等待元素;

  • • 循环任务:跟 C 语言里 {} loop(condition)类似,先循环,再判断;

  • • 随机整数:使用纯 JavaScript 实现,至少要 Math.floor(Math.random() * diff + min) 才能实现;Automa 内置了 $randint 方式,直接用就好了;

  • • 获取元素:简单页面,一个元素,一个值,够用了;复杂页面,只能用 DOM 提取,所以要写 JavaScript 代码;

  • • 循环变量:Automa 循环体内,使用内置变量 loopData.loopId 的方式,拿到循环数据;循环的数据类型,与 JavaScript 一致。

写在最后

如果你在运营小红书,需要不时复盘爆款笔记。但小红书手机端、网页后台,提供的功能,无法导出数据,很难分析。这个工具,正好帮到你。

点击下方二维码,添加小编微信好友,备注“小红书报表”,您将立即收到完整流程插件资料包

往期推荐

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。