ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

影刀RPA新手教程:全局变量与参数传递实战——跨流程数据共享的正确姿势

影刀RPA新手教程:全局变量与参数传递实战——跨流程数据共享的正确姿势 影刀RPA新手教程全局变量与参数传递实战——跨流程数据共享的正确姿势刚入行接的第一个单子就栽在了全局变量上——一个小红书采集流程主流程调了3个子流程分别采集笔记正文、评论、图片。一开始图省事把采集的URL直接写成全局变量想着三个子流程都能读到结果跑到一半数据全串了。排查了一下午才发现是第二个子流程改了这个URL的页码参数第三个子流程拿到了错误的值。从那以后我才真正搞清楚什么时候用全局变量、什么时候用流程参数、什么时候老老实实写文件。这篇文章用一个多子流程的电商采集系统做主线把三种数据传递方式掰开了讲。1. 认识影刀/安装影刀官网下载安装包安装后记得装浏览器插件——Chrome/Edge插件是独立的在影刀客户端右上角工具箱里点浏览器插件安装。插件没装好网页自动化全部白搭。社区版免费功能够用。创业版和企业版主要多了云调度和API接口。个人接单用社区版就够了。界面分三大块左边指令库中间画布拖指令进来连线就行右边是属性和变量区。全局变量在右下角那个小按钮里不显眼但用好了威力很大。2. 元素定位四合一采集之前先定位。F12打开开发者工具右键元素→Copy→Copy XPath这是最快的路子。XPath六种常用写法//div[classtitle]——最常用属性精确匹配//span[contains(text(),价格)]——文本包含匹配//a[starts-with(href,/product/)]——属性开头匹配//div[idmain]/ul/li[1]——层级定位//img[contains(src,https://) and width200]——多条件//*[idcontent]//span——万能后代搜索CSS选择器也不弱.price——class选择器最简单#product-title——id选择器唯一元素最快div.sku-item span——父子关系ul.list li:nth-child(3)——第N个元素[data-id12345]——自定义属性div.detail img[src$.jpg]——属性值结尾匹配span:not(.sold-out)——排除某个classdiv.info *——所有直接子元素选型指南能拿id的就用CSS#id复杂的嵌套结构用XPath的//更顺手。如果是动态classReact那种带hash的classNameXPath结合contains()更稳。正则表达式在元素编辑里配合全局变量用。比如元素文本可能是价格99元或价格128元属性值用价格(\d)元去匹配然后用全局变量把正则表达式存起来。3. 变量与数据类型影刀里的变量就是容器。四种最常用数字——采集到的价格、销量、页数都是数字。注意从网页上抓回来的是字符串要用指令数字转换转成数字才能做加减。字符串——URL拼接最典型https://www.taobao.com/search?q 关键词 page 页数。索引从0开始字符串[0]是第一个字符。注意中文一个字符占一个位置别被Python的编码概念带偏。列表——采集多个商品时循环里append进列表。列表索引和字符串一样从0开始。字典——最常用的是商品信息{标题: xxx, 价格: 99, 销量: 5000}。取字典值字典[标题]。键不存在会报错两种方案方法一用if判断标题 in 字典方法二设置键不存在时返回默认值JSON——HTTP请求拿到的是JSON字符串两步走JSON转对象→操作数据→转回文本导出。接口返回的基本都是JSON。全局变量本质上是跨流程的字典。在Python块里引用全局变量要写成package.variables[变量名]这是官方xbot包提供的接口。我一开始直接用变量名引用报了半天错。4. 流程控制五种循环我最常用的是ForEach列表循环和相似元素循环For次数循环——知道要跑多少遍时用比如固定爬10页。相似元素循环——网页上所有商品列表项、所有评论项一次性抓到所有相似元素然后逐个处理。这是采集的核心循环。ForEach列表循环——先收集URL到列表然后逐条处理。适合先采集列表页再进详情页的场景。While条件循环——“下一页按钮还是可点击状态时就继续”。核心判断逻辑获取下一页按钮的class属性如果不包含disabled就点击翻页。If条件判断——每个关键步骤前判断数据是否存在、变量是否为None。Try-Catch异常处理——网络波动、元素定位失败、弹窗拦截都靠它兜底。我在每个子流程最外层包一个Try-Catch捕获Exception后用日志记录流程继续跑。5. 网页自动化等待策略三种等待网页加载完成最常用、等待元素出现进详情页等商品标题出来了再做下一步、固定时间等待慎用不同网络环境两样。弹窗处理五步标准流程判断弹窗是否存在如果存在定位弹窗关闭按钮点击关闭等待弹窗消失继续主流程盲点弹窗——不是标准弹窗的DOM结构而是一个浮层div。这种要分析HTML自己写XPath定位。有一次采集天猫一个新用户领券弹窗把我整流程卡死了就是因为没用Try-Catch裹着。翻页——不设置总页数用下一页按钮是否disabled来判断。最稳的写法xpath//button[contains(class,next) and not(contains(class,disabled))] ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/26477f9ce42d4cc884987fb2e20fe0a1.png#pic_center)能点就继续不能点说明到最后一页了。懒加载——商品列表往下滚才加载新数据。处理方式每次循环先滚动到底部window.scrollTo(0, document.body.scrollHeight)等2秒再抓取新出现的数据用数据ID去重。iframe处理——先切换到iframe再定位内部元素操作完切回主文档。窗口切换——多标签页采集时每打开一个新标签都要获取已打开的网页对象把新标签设为当前操作页。6. 数据处理Excel读写——最常用的导出格式。批量写入前先把数据攒成列表一次性写进去不要一行一写慢到怀疑人生。CSV——轻量级导出。不需要装Excel就能生成客户拿到直接用。JSON——复杂数据结构存JSON最方便。采集结果里带数组的一个商品多个SKUJSON天然支持嵌套。文本清洗——网页采集回来的数据大概率带空格、换行符。strip()去两端空格replace(\n,)去换行replace(¥,)去货币符号。数据库连接——量大十万级以上建议直接入库。注意五个常见报错连接超时——检查网络和数据库地址认证失败——账号密码不对表不存在——先创建表字段类型不匹配——插入前做类型转换主键冲突——用REPLACE或INSERT IGNORE批量插入比逐条插入快几十倍。7. 鼠标键盘图像自动化模拟模式vs驱动模式。模拟模式走的是操作系统层面的模拟点击兼容性最好但速度慢。驱动模式走浏览器内核快但有些网站反爬会检测。虚拟键盘驱动——输入框填内容用填写输入框指令比模拟键盘输入稳。中文输入用剪贴板方式复制→粘贴不走输入法100%不出错。图像识别——某个元素用XPath和CSS都抓不到时最后的武器。wait_appear等图片出现click点击图片hover悬停dblclick双击。锚点9个位置左上、中上、右上、左中、中心、右中、左下、中下、右下加偏移量微调。OCR——截图后识别文字。影刀自带OCR但对复杂场景花体字、低对比度用Python的pytesseract更准。8. 进阶技能HTTP请求——直接调接口比模拟浏览器快得多。F12→Network→找到接口→看Headers里的参数格式→用发送HTTP请求指令模拟。鉴权方式常见两种Cookie和Token。从浏览器复制Cookie到Headers里Token一般从登录接口返回。API对接——第三方平台飞书、企业微信的API先看接口文档→确定请求方式GET/POST→确定参数格式→在影刀里用HTTP请求调用。Python协同——影刀支持在流程里嵌入Python代码块。def定义函数在同一流程的其他Python块里调用。不同流程间的Python函数通过设置全局变量传递函数引用。跨模块引用第三方库pip安装的库影刀需要先在设置里配置Python路径。我第一次做的时候以为Python块里直接import就行结果影刀用的是自己的Python环境需要在客户端设置里把Python路径指向你的Anaconda或系统Python。OCR文字识别——发票识别、验证码识别、截图提取文字。影刀自带OCR对规整字体效果好对变形验证码基本无效。这种场景上打码平台或自己训练模型。ADB手机自动化——连接安卓手机执行点击、滑动、输入等操作。群控场景用并发调用子流程每个手机跑一个独立的子流程之间互不干扰。9. 平台实战淘宝采集 小红书采集淘宝列表页→搜索关键词→翻页采集商品标题/价格/销量→进详情页→采集SKU信息颜色/尺码/价格/库存。淘宝反爬策略相对温和控制频率每页间隔3秒基本不会触发验证码。翻页用下一页按钮的disabled属性判断不用设置总页数。小红书笔记列表→滚动加载→采集笔记标题/点赞数/收藏数→进笔记详情→采集正文/评论/图片。小红书的反爬严得多需要模拟真实用户行为随机滚动距离、随机等待时间、偶尔鼠标悬停。评论是懒加载的每次滚动到底部才会加载更多评论。全局变量在这两个平台采集中怎么共用账号、密码放全局变量——不用每个子流程传一遍采集结果放全局变量——多个子流程都能往同一个列表里追加数据绝对不能放的各子流程的临时状态如当前页码、当前商品ID——这是竞态条件的温床我在淘宝采集流程里就是这样分的主流程的account、password、base_url用全局变量。每个子流程自己的循环索引用局部变量。采集结果用全局变量列表all_products统一收集最后一次性写Excel。跑了半年没出过问题。10. 系统联动采集完数据不通知等于白跑。三种通知方式飞书消息通知——用飞书机器人webhookHTTP POST发送消息。采集开始发一条开始执行完成后发共采集XX条数据报错时发采集异常XXX。一条HTTP请求搞定。飞书多维表格读写——比Excel强的地方多人协作、历史记录、API直接操作。用飞书开放平台的API获取tenant_access_token→创建/查询多维表格→写入数据。适合给客户做数据看板。邮件发送——通过SMTP服务器发送支持附件。采集结果Excel直接当附件发送给客户。QQ邮箱、企业邮箱都支持需要开启SMTP服务并获取授权码。定时任务——影刀客户端自带定时执行功能。设置每天几点跑一次流程跑完自动关闭。注意定时任务依赖电脑不关机不休眠如果要做7x24小时的正式服务得上云调度。11. 工程化与规范子流程封装——主流程只做调度具体业务逻辑放进子流程。一个子流程只做一件事一个负责登录、一个负责采集列表、一个负责采集详情、一个负责导出数据。参数传递三方案对比方案一流程参数。父流程调用子流程时传入参数子流程通过流程参数接收。适合一次性传递的数据如要采集的URL、“采集目标页数”。优点数据隔离不会相互干扰。缺点层数多了传参链变长。方案二全局变量。多个子流程共享的数据放全局变量。适合账号密码、配置项、采集结果汇总列表。优点一次设置到处访问。缺点多子流程同时修改同一个全局变量会竞态崩溃。方案三文件持久化。流程重启后还需要的数据写文件。配置文件放config.json运行时读取。适合环境配置、上次执行断点位置。推荐的最佳实践config.json配置文件 ├─ account: xxxxx ├─ password: xxxxx ├─ urls: [url1, url2, url3] └─ settings: {delay: 3, retry: 5} 主流程启动→读取config.json→写入全局变量→调用子流程config.json的内容读进全局变量后所有子流程通过package.variables[变量名]访问。配置文件读一次就行不用每个流程读一遍。调试技巧——打断点一行行排查。在可疑指令上右键→添加断点→运行流程→在断点处停下来→查看所有变量的值。复杂bug用这个方法比看日志快得多。print()大法也管用在Python块里把变量值打印出来运行日志里能直接看到。命名规范——全局变量名用大写加下划线BASE_URL、ACCOUNT_INFO流程参数用小写target_url、page_num临时变量用小写current_item、result_list。一眼就能看出什么类型。版本选择——社区版免费本地运行功能全接私单够用。创业版多了云调度和团队协作。企业版主要是权限管理和API对接。个人开发者没必要上付费版。流程模板化——把常用的采集逻辑抽象成通用模板。比如列表页翻页采集模板输入URL翻页XPath→输出数据列表。下次接类似的单子改几个参数就能复用。12. 速查表/常见报错元素定位失败原因元素还没加载出来解决加等待指令或者在捕获元素时勾选等待元素出现NoneType报错原因全局变量没初始化就用解决先给全局变量赋值再使用。或者在用之前if判断变量 is not NoneXPath语法报错原因路径书写不正确单引号双引号混用解决在元素编辑器里点校验按钮测试看能不能匹配到元素Excel报错Array to String原因往单元格塞了列表类型的数据解决用join把列表转成字符串再写入日期偏移原因影刀读Excel日期默认从1900年开始算解决用Python的datetime处理或直接用文本格式读内存不足原因循环里一直往同一个大变量追加数据没释放解决每100条数据写一次Excel清空变量全局变量被覆盖原因多个子流程改了同一个全局变量解决能用流程参数传的不要用全局变量必须共用的加锁或串行执行loop报错原因循环的相似元素列表为空解决循环前先判断列表长度长度0才进循环配置参数超过4000字节——影刀的主流程参数有大小限制超过4000字节会丢失。默认值不要太长复杂的配置用文件传。最后几点心得全局变量不是万能解决方案能传参数的优先用参数配置项账号密码URL放config.json→读到全局变量→子流程直接用临时数据当前页码、商品ID用流程参数传递别放全局变量采集结果用全局变量列表统一收集→最后一次性写文件多个子流程同时跑并发调用子流程绝对不能共享可写全局变量影刀RPA学习资源推荐去 home.linyan.cloud 看看里面有更系统的教程和实战案例。#影刀RPA #RPA教程 #新手入门 #全局变量 #参数传递 #子流程作者林焱
返回列表