影刀RPA新手教程:非技术背景也能学会的自动化教程——零编程基础轻松掌握影刀RPA

0 阅读16分钟

影刀RPA新手教程:非技术背景也能学会的自动化教程——零编程基础轻松掌握影刀RPA

好多朋友一听到"自动化""RPA"这些词,脑子里第一反应就是:这得会编程吧?我连代码长什么样都不知道,肯定学不会。我当初也是这么想的。

说实话,我第一次打开影刀的时候,看到那个流程图界面,心里也犯嘀咕。但用了十分钟就发现,这玩意儿跟编程完全是两码事——它更像是"把你要做的事情用流程图连起来",你只要告诉它第一步点哪里、第二步复制什么、第三步贴到哪里。就这么简单。

这篇教程我不会给你讲任何枯燥的概念,我们就跟着一个真实案例走——用影刀自动采集小红书上的爆款笔记数据,整理成Excel表格,然后通过飞书消息通知自己。做完这个项目,你就能理解影刀的整个工作方式,以后做什么自动化都大同小异。

一、影刀是什么?怎么装?

影刀就是一个能帮你自动操作电脑的软件,你可以理解成"虚拟助手"。你告诉它"打开网页→找这个按钮→点击→复制文字→粘贴到Excel",它就老老实实帮你做。

下载安装没什么特别的,去官网下载就行。但有三个坑我第一次装的时候全踩了:

第一,系统缩放比例必须调到100%,不然你捕获网页元素的时候会偏移。我这个教训太深刻了,当时捕获一个按钮,红框飘到按钮上方两厘米,完全对不上,调试了一下午。去显示设置里把缩放调到100%,然后重启浏览器和影刀

第二,浏览器缩放也必须是100%。你可以在浏览器右上角设置里检查,很多人平时习惯125%或150%看网页,但影刀跟这个不兼容。

第三,如果浏览器快捷方式开启了兼容模式,关掉它。右键浏览器快捷方式→属性→兼容性→取消勾选"以兼容模式运行"。

二、怎么找到网页上的元素——四种方式一次搞定

这是整个影刀最核心的技能,没有之一。你要操作网页上的按钮、输入框、文字,首先得告诉影刀"它在哪"。

在这里插入图片描述

2.1 元素捕获——最常用的方式

打开影刀的捕获面板,鼠标移到网页上,影刀会自动识别出按钮、输入框、图片这些元素。红框框住的就是你要操作的东西。

小红书上我们要采集笔记标题,鼠标移到标题文字上,影刀会高亮。点击一下,这个元素就被"捕获"了。

如果你想批量获取所有笔记的标题,需要捕获"相似元素"——先捕获第一个标题,再捕获第二个,影刀就能识别出页面上所有标题的共同特征,把它们全部列出来。

2.2 XPath定位——6种写法够你用了

有时候元素捕获不够精准,比如两个按钮长得很像但功能不同,这时候用XPath就能精确锁定。

第一种,按标签名找://h1 找所有h1标题。第二种,按属性找://a[@href='/detail'] 找href属性为/detail的链接。第三种,按文本内容找://span[text()='关注'] 找文字是"关注"的span。第四种,按包含的文本找://div[contains(text(),'笔记')]。第五种,按部分属性找://input[contains(@class,'search')]。第六种,层级关系://div[@class='card']//span[@class='title'] 在卡片容器里找标题。

XPath写得不好容易报错,编辑器里会出现"XPath语法错误"的提示。这通常是因为少写了引号或者括号不匹配,检查一下就行。

2.3 CSS选择器——8种语法反而更直观

CSS选择器跟XPath是并列的两种定位方式。我个人觉得CSS更简洁,尤其是对有前端基础的同学。

按标签:h1。按类名:.title。按ID:#btn-search。按属性:[data-type='video']。层级:.card .title。子元素:.card > .title。第n个:li:nth-child(3)。按部分属性:[class*='search']

在小红书案例里,每条笔记的标题可以用 .note-item .title 来定位。影刀的"获取相似元素列表"指令里,定位方式选择CSS选择器,填上这个表达式就行。

2.4 正则表达式——三个场景就够了

在这里插入图片描述

正则主要在对元素属性做模糊匹配的时候用。比如有些按钮勾选和不勾选时class属性不一样,一个带active一个不带。

判断不包含某段文字用这个语法:^((?!active).)*$,意思是匹配"不含active"的字符串。同时排除多个关键词:^((?!disabled|prev|diff).)*$,意思是这三个词都不能出现。

三个最常用的正则场景:一是翻页判断(class不含disabled说明还能翻),二是状态判断(是否包含active),三是提取数字(从"共100页"中提取100)。

三、变量——给数据取个名字

变量就是给数据取个名字存起来。影刀里不需要你声明类型,它会自动识别。

比如你从Excel里读出来一行数据,存到变量row_data里,这个变量就变成了一行数据的列表。你从网页上抓到一段文字,存到note_title里,这就是一个字符串。

我第一次搞混的是:从Excel循环读取的时候,循环项本身可能是一个列表(因为读一行就是多个单元格),如果你直接把列表传给输入框,影刀会报错:Can not convert Array to String. 记住这个报错,说明你拿了一个列表当字符串用,需要取列表里的某一项,比如用list[0]取第一项。

四、流程控制——让程序有脑子

循环

For次数循环:你明确知道要做多少次就选这个,比如翻100页,每页采集20条笔记。

[video(video-Ttu1E42H-1782144419653)(type-csdn)(url-live.csdn.net/v/embed/526…)]

ForEach相似元素循环:对网页上每一张笔记卡片都做同样的操作(点击、复制标题),用这个最方便。

While/无限循环:不知道要翻多少页的时候用,配合条件判断退出。小红书的搜索结果拉到底,下一页按钮变灰了(class里多了disabled),就跳出循环。 在这里插入图片描述

条件判断

If指令就是你告诉影刀"如果满足什么条件就做什么"。翻页案例里:如果下一页按钮的class属性包含disabled→退出循环,否则→点击下一页继续。

Try-Catch

这个不是"写代码",影刀有专门的Try块指令。你把可能出错的操作放在Try里,出错了就走Catch分支。这个在批量处理的时候特别重要——不能因为处理第23条数据报错,前面22条白干了。

五、网页自动化——看不见的坑最多

等待策略三种

第一种,等元素出现。影刀的等待元素(web)指令,设置超时时间(我一般设30秒),等那个元素加载出来再操作,不等满了就往下走。

第二种,等元素消失。比如弹窗关闭后、加载动画消失后才继续。等待元素消失(web)

第三种,固定等待。实在没办法的时候才用sleep,但尽量少用,因为你不知道对方服务器今天快还是慢。

弹窗处理的五步

小红书有时候会弹登录弹窗、活动弹窗。处理步骤:第一步先判断弹窗是否存在(等元素出现),第二步如果存在就关掉(找关闭按钮点击),第三步如果找不到关闭按钮就点遮罩层,第四步用Try包住以防页面上根本没弹窗,第五步弹窗关闭后再等一秒让页面恢复正常。

翻页——用disabled class判断

这个技术我在前面提过了,再总结一下:F12查看"下一页"按钮的HTML,看class属性。能点击的时候class不含disabled,到最后一页时class里多了disabled。流程设计:无限循环→判断class是否含disabled→不含就点下一页→含了就跳出。

懒加载

在这里插入图片描述

小红书下拉才会加载更多内容。用"滚动到页面底部"指令,滚一次等2秒,等新内容加载完,再滚下一次。记得在滚之前先获取当前元素数量,滚之后等数量增加了再采集,不然会采集到空列表。

iframe和窗口切换

如果网页里嵌套了另一个网页(iframe),你需要先"切换到iframe"才能操作里面的元素。新标签页打开后,要用"获取已打开的网页对象"匹配新标签页的标题或URL,然后再操作。很多人报"未找到控件"就是因为还在操作老标签页。

六、数据处理——Excel、文本、JSON、数据库

Excel读写

读Excel用"读取Excel区域",可以读指定范围,比如A1到D100。写Excel用"写入Excel区域",指定从哪里开始写。

批量处理必知:循环读取Excel的每一行时,循环项row是列表类型。如果你想把单元格值当作字符串输出,不要直接传row,要传row[0]row[1]

五个经典Excel报错

第一个,Can not convert Array to String——把列表当字符串用了,取具体索引。

第二个,日期变成了偏移数字——比如2023-01-01变成了44927。这是Excel内部存储格式问题,在读取前先设置单元格格式为"文本",或者在Python里用datetime库转换。

第三个,发生意外——这种模糊报错通常是因为某个单元格的格式异常,比如手机号存成了日期格式。排查方法:二分法读取,先读前一半行,不报错就说明问题在后一半,逐步缩小范围找问题行。

第四个,内存不足——Excel文件太大(几万行以上)时出现。分批读取,每次读1000行,处理完继续读下一批。

第五个,WPS不支持运行宏——如果你用WPS而不是Office,用Python通过win32com调用Excel宏会失败。换成影刀自带的Excel指令,或者安装Microsoft Office。 在这里插入图片描述

文本提取与清洗

从"共100页"中提取数字:用"提取数字"指令。从一段文字中提取手机号、邮箱:用正则1[0-9]{10}[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}

JSON解析

API返回的数据基本都是JSON格式。影刀里有"解析JSON"指令,解析后可以按路径取值,比如data.list[0].title

数据库连接

连接MySQL、SQL Server在影刀数据库指令里配置就行。一个常见报错是编码问题——用GB2312编码导入含生僻字的数据会报语法错误,改成GBK编码(代码936)就能解决,因为GBK对GB2312做了扩充。

七、鼠标键盘和图像自动化

模拟模式 vs 驱动模式

模拟模式就是影刀像人一样移动鼠标、敲键盘,任何软件都兼容,但速度慢。驱动模式是直接向操作系统发送指令,速度快但有些软件会拦截。

日常操作大多数场景用模拟模式就行。如果你的流程要高频点击(比如批量下载),用驱动模式能省很多时间。

图像识别

网页自动化搞不定的场景用图像识别。比如有些软件不是网页,没有HTML元素可以捕获,就截图存到影刀图像库,用wait_appear等待这个图片出现,然后click_image点击,hover_image悬停。

wait_appear默认超时20秒,你可以调到更长。它有9个位置的锚点(左上、中上、右上、左中、正中、右中、左下、中下、右下),可以加偏移量。比如你想点击"登录"按钮的右下角偏右10像素的位置,就设置锚点为右下,偏移x=10。

dblclick_image是双击,用于双击打开文件之类的场景。

在这里插入图片描述

八、进阶技能——HTTP请求、Python、OCR、手机自动化

HTTP请求和API

你不需要写代码也能调用API。影刀有"HTTP请求"指令,填URL、选方法(GET/POST)、填请求头和Body,就能调用任何API。

# 如果你用编码版,调用API更灵活
import requests
response = requests.get('https://api.example.com/data')
data = response.json()

Python协同

影刀支持在流程中嵌入Python代码块。什么时候用Python?网页自动化搞不定的复杂逻辑,或者需要调用第三方库的时候。比如用win32com操作Excel宏:

import win32com.client
xl = win32com.client.Dispatch("Excel.Application")
wb = xl.Workbooks.Open(r"C:\data.xlsx")
xl.Application.Run("宏名称")
wb.Save()
xl.Application.Quit()

OCR文字识别

有些场景你看到的文字是图片,没有HTML可以捕获——比如验证码、软件界面上的文字。这时候用OCR。

影刀内置了百度和腾讯的OCR引擎。代码示例:

from xbot import ai
ocr = ai.baidu.BaiduAI(api_key='你的key', secret_key='你的secret')
result = ocr.ocr_from_file(r'D:\screenshot.png')
print(result)  # 返回识别出来的文字列表

ADB手机自动化

影刀可以连接安卓手机做自动化。有两种模式:appium模式和u2模式(4.7版本新增)。连接方式:

在这里插入图片描述

from xbot.mobile import u2
session = u2.connect_by_custom_name('我的小米手机')

连接后就能操作手机上的元素,跟操作网页元素类似。

九、平台实战——小红书和淘宝

小红书

我们全程的案例就是采集小红书爆款笔记。核心步骤:打开小红书网页版→搜索关键词→滚动加载更多→捕获相似元素获取所有笔记标题、点赞数、作者→翻页(判断disabled class)→写入Excel。

最难的地方是小程序可能会弹登录窗口。处理方法前面讲了——Try包住,先判断弹窗是否存在,存在就关掉。

淘宝

淘宝的自动化场景很多:商品上架、订单处理、评价采集。淘宝页面比较复杂,有很多动态加载的元素,等待策略尤其重要。建议每个操作步骤之间加"等待元素出现",不要依赖固定等待时间。

淘宝还有一个坑:有些页面用了iframe,你要先切换到iframe才能操作里面的内容。注意元素捕获时检查元素路径里有没有iframe

十、系统联动——飞书通知、Excel、定时任务

飞书消息通知

我们采集完小红书数据,怎么第一时间知道?用飞书群通知。

在飞书群里添加一个自定义机器人,拿到webhook地址。影刀里用"飞书群通知"指令,填上webhook地址,消息类型选"文本",内容写上采集到的数据摘要。 在这里插入图片描述

[video(video-31wi4uB1-1782144426341)(type-csdn)(url-live.csdn.net/v/embed/526…)]

# 编码版写法
import requests
webhook = "https://open.feishu.cn/open-apis/bot/v2/hook/xxxx"
data = {"msg_type": "text", "content": {"text": "今日采集完成,共200条笔记"}}
requests.post(webhook, json=data)

富文本和消息卡片也支持,可以发带格式的报告。

飞书多维表格

如果数据量比较大,Excel不方便共享,可以把结果写入飞书多维表格(Base)。影刀有飞书多维表格的指令,操作方式类似Excel。

邮件发送

影刀有"发送邮件"指令,配置SMTP服务器就能发。做完定时采集任务,自动发一封邮件给自己,附上数据文件。

定时任务

流程写好以后,在影刀控制台配置定时计划,设置每天几点自动执行。也可以在代码里用API调度:POST https://api.yingdao.com/oapi/dispatch/v2/job/start,传入jobId即可远程启动应用运行。

十一、工程化——让流程像个正经项目

子流程封装

当你发现某段逻辑在多个地方重复使用时(比如"关闭弹窗"这个操作),把它抽成一个子流程。以后任何地方需要关闭弹窗,直接调用这个子流程就行,不用重复写。

打断点调试

这是排查问题的核心技能。在指令前面点一下,出现橙色圆点就是断点。运行到断点会自动暂停,你可以在下方的调试面板查看所有变量的实时值。 在这里插入图片描述

实际调试步骤:在报错的指令前打断点→运行→暂停时看变量值和类型→发现是None就说明前面没有正确赋值→按"单步调试"逐条执行→观察每步后变量的变化。

我前面提到的 Can not convert Array to String 报错,就是这样调试发现的——变量竟然是列表而不是字符串。

命名规范

变量名要有意义,note_titlea1好一百倍。流程名也要说清楚是干什么的,一个月后回头看还能看懂。

版本选择

影刀分社区版和企业版。个人学习用社区版完全够用。企业版多了计划任务、API调度、工作队列这些功能。

模板化

把常用的流程保存为模板,下次做类似项目直接基于模板改。比如"网页数据采集"这个模板,包含打开网页、翻页、获取相似元素、写入Excel的骨架,你只要改成自己的元素选择器就行。

十二、速查表和常见报错

元素定位类

报错信息原因解决办法
未找到控件元素没捕获到或标签页切换了校验元素,确认在正确标签页
匹配到多个控件你用了单元素指令但定位到了多个加上更精确的属性限制或用相似元素循环
元素捕获红框偏移DPI/浏览器缩放不是100%都调到100%,重启影刀和浏览器

XPath语法类

XPath语法错误通常是少写了引号、括号不匹配,或者路径层级写错了。建议先用浏览器的F12开发者工具里的"复制XPath"拿到完整路径,再根据需要简化。

Excel类

在这里插入图片描述

Can not convert Array to String → 列表当字符串了,用索引取值。

日期偏移 → Excel日期格式问题,读取前设置单元格为文本格式。

发生意外 → 二分法定位问题行,通常是单元格格式异常。

循环类

循环中网页刷新导致元素丢失 → 改用For次数循环+按索引重新获取。

弹窗类

弹窗拦截 → 在处理逻辑前加判断+Try-Catch,先判断弹窗是否存在再关。


RPA自动化 · 影刀RPA · 零基础入门 · 小红书采集 · 飞书通知 作者:林焱