影刀RPA新手教程:多标签页与多窗口完全指南——窗口切换、标签管理、后台浏览器运行

49 阅读13分钟

影刀RPA新手教程:多标签页与多窗口完全指南——窗口切换、标签管理、后台浏览器运行

作者:林焱 | 多窗口踩坑实录,所有场景全覆盖


写在前面

多标签页和多窗口操作,是影刀RPA里非常容易混乱的一个模块。

开了七八个标签页,不知道当前操作的是哪个。

新窗口弹出来,流程还在往旧窗口里填数据,结果全填错了。

还有后台运行浏览器,不显示界面,但要在多个标签页之间切换,更是容易乱。

我做过一个项目,同时操作三个电商后台,每个后台要开两个标签页。

光窗口切换这块就调试了三天,各种切换到错误窗口的问题。

这篇文章把多标签页和多窗口的所有操作讲透。


模块一:安装与多窗口相关指令入口

多标签页/多窗口相关的指令在几个不同的地方。

核心指令一:获取已打开的网页对象

指令区 → 网页自动化 → 获取已打开的网页对象。

在这里插入图片描述

这个指令非常重要,可以获取当前所有已打开的标签页/窗口。

核心指令二:切换网页对象

指令区 → 网页自动化 → 切换网页对象(有些版本叫"激活网页对象")。

用来在多个标签页/窗口之间切换,让某个网页成为当前活动窗口。

核心指令三:获取所有已打开的网页对象

一次性获取所有打开的标签页/窗口,保存到列表里。

核心指令四:关闭网页对象

关闭指定的标签页/窗口。

我当时踩的最大的坑:以为"获取已打开的网页对象"每次都会返回最新的所有窗口。

实际上它只返回你指定URL或标题匹配的窗口,不是全部窗口。

要获取全部窗口,需要用"获取所有已打开的网页对象"这个指令。


模块二:元素定位——多窗口下的元素定位要点

当有多个窗口或标签页时,元素定位必须明确指定是在哪个网页对象上操作。

每个"点击元素"、"填写输入框"指令,都有一个"网页对象"参数。

如果你不指定,影刀会默认用当前激活的网页对象。

但如果同时开了多个窗口,当前激活的是哪个,往往不是你以为的那个。

在这里插入图片描述

正确做法:每个网页操作指令,都明确指定网页对象变量。

示例:

第一步:打开网页(百度)→ 保存到 web_baidu
第二步:打开网页(谷歌)→ 保存到 web_google
第三步:在 web_baidu 上填写输入框(明确指定网页对象)
第四步:切换到 web_google,在 web_google 上填写输入框

根据素材里的经验:如果两次循环之间打开了新标签页,需要用"获取已打开的网页对象"重新获取新标签页的对象,保存为不同名的变量。


模块三:变量与多窗口对象的管理

多窗口操作时,变量命名规范非常重要,否则自己都会搞混。

命名规范建议:

web_baidu          百度首页
web_baidu_search   百度搜索结果页
web_google         谷歌首页
web_admin          后台管理页面

加上网站标识和页面标识,一看变量名就知道是哪个页面的对象。

列表变量存储多个同类窗口:

如果有多个同类窗口(比如打开了10个商品详情页),用列表存储。

[video(video-45puJA1F-1782670488611)(type-csdn)(url-live.csdn.net/v/embed/525…)]

变量名:list_product_pages
变量类型:列表

每次打开一个商品详情页,就把新的网页对象添加到这个列表里。

后续用FOR循环遍历这个列表,逐个操作每个商品详情页。

全局变量控制窗口数量:

在这里插入图片描述

用一个全局变量 max_windows 控制最多同时开多少个窗口。

避免开太多窗口导致内存不足,浏览器崩溃。


模块四:流程控制——多窗口的打开、切换与关闭

多窗口操作的流程控制,核心就是:打开 → 操作 → 切换 → 关闭。

打开新窗口/标签页:

用"打开网页"指令,属性区里有一个"打开方式"参数。

可选值:新标签页、新窗口、当前标签页。

根据需求选择,一般选"新标签页",轻量一些。

切换到指定窗口:

用"切换网页对象"指令,选择要切换到的网页对象变量。

切换后,后续的网页操作都会在这个窗口/标签页里执行。

关闭窗口:

用"关闭网页对象"指令,关闭指定的窗口/标签页。

流程控制结构示例(循环打开多个商品页):

第一步:打开搜索结果页 → 保存到 web_search
第二步:获取所有商品链接元素 → 保存到 list_links
第三步:FOR i = 0 到 list_links.length - 1:
    在 web_search 上点击第 i 个商品链接(Ctrl+点击,新标签页打开)
    获取新打开的标签页对象 → 保存到 web_product_i
    切换到 web_product_i
    采集商品详情数据
    关闭 web_product_i
第四步:所有商品处理完后,关闭 web_search

在这里插入图片描述

模块五:网页自动化——多标签页完整操作方案

场景一:同一网站,多个标签页交替操作

案例:在搜索结果页和商品详情页之间交替操作。

问题:从商品详情页返回搜索结果页,搜索结果页的网页对象还是原来的吗?

答案:是的,只要不关闭,网页对象一直有效。

操作流程:

第一步:打开搜索结果页 → web_search
第二步:Ctrl+点击第一个商品链接(新标签页打开)
第三步:获取新标签页对象 → web_product
第四步:切换到 web_product,采集数据
第五步:关闭 web_product
第六步:切换回 web_search(用"切换网页对象"指令)
第七步:继续处理下一个商品

关键点:切换回搜索结果页时,必须用"切换网页对象"指令,不能假设当前就是搜索结果页。

场景二:不同网站,多个窗口同时操作

案例:同时从百度搜索和谷歌搜索采集数据,做对比分析。

操作流程:

第一步:打开百度 → web_baidu
第二步:打开谷歌 → web_google(新窗口,不是新标签页)
第三步:在 web_baidu 上输入关键词,搜索
第四步:在 web_google 上输入相同关键词,搜索
第五步:分别采集两个窗口的搜索结果
第六步:数据对比分析

坑点:两个窗口的元素定位不要搞混。

百度的搜索框XPath和谷歌的完全不同,不要用一个XPath去两个网站上找元素。

场景三:弹窗式新窗口(不是标签页)

有些网站的"新窗口"是真的弹出了一个新浏览器窗口,不是新标签页。

这种窗口需要用"获取所有已打开的网页对象"来获取。

在这里插入图片描述

因为它不在原窗口的标签页列表里,是一个独立的窗口。


模块六:数据处理与多窗口采集

多窗口采集时,数据需要正确归集到对应的变量里。

场景:开了10个商品详情页,每个页面采集商品名称、价格、销量。

正确做法:每个窗口采集到的数据,存到同一个数据表的不同行里。

数据表列:商品名称、价格、销量、来源窗口URL

每采集完一个窗口,就往数据表添加一行,同时记录来源URL,方便追溯。

场景:多窗口采集去重

不同窗口可能采集到相同的商品(比如百度和谷歌都搜到了同一个商品)。

采集完后,用"数据表去重"指令,根据商品名称或URL去重。


模块七:鼠标键盘与多窗口的配合

多窗口操作时,有时需要配合鼠标键盘模拟。

场景一:Ctrl+点击链接(新标签页打开)

用"发送快捷键"指令,发送 Ctrl 键(按住不放)。

然后用"点击元素"指令,点击链接。

在这里插入图片描述

然后用"发送快捷键"指令,释放 Ctrl 键。

但这个方法不稳定,推荐使用"打开网页"指令,打开方式选"新标签页",更稳定。

场景二:窗口最小化/最大化/还原

用"执行Python脚本"指令,调用pyautogui或win32gui,控制窗口状态。

import win32gui
import win32con

# 查找窗口句柄
hwnd = win32gui.FindWindow(None, "百度一下")
if hwnd:
    # 最小化
    win32gui.ShowWindow(hwnd, win32con.SW_MINIMIZE)
    print("已最小化")

场景三:截图保存(多窗口佐证)

用"在网页上执行JavaScript"注入截图代码,或者用pyautogui截图。

每处理完一个窗口,截个图保存,作为执行佐证。


模块八:进阶技能——后台浏览器运行

后台运行浏览器是多窗口操作的高级场景。

配置方法:在影刀的"应用设置 → 浏览器设置"里,勾选"以无头模式运行"。

无头模式下,浏览器不显示界面,所有操作在后台完成。

多窗口后台运行的优势:

可以同时开很多个窗口,不受屏幕空间限制。

操作速度也更快,因为没有界面渲染开销。

后台运行的坑:

在这里插入图片描述

调试不方便,看不到浏览器里发生了什么。

建议在流程里多加"打印日志"指令,记录每一步的执行情况。

还有,后台运行时,"等待元素存在"指令的超时时间要设长一点。

因为没有界面渲染,页面加载可能比有界面时慢。

后台运行+多窗口的完整方案:

第一步:配置浏览器为无头模式
第二步:打开窗口1 → web_1
第三步:打开窗口2 → web_2
...
第四步:用"切换网页对象"指令在各个窗口之间切换操作
第五步:所有操作完成后,关闭所有窗口

模块九:平台实战——跨平台价格对比采集

用一个完整案例,把多窗口操作串起来。

案例背景:同时从淘宝、京东、拼多多搜索同一款商品,采集价格做对比分析。

第一步:打开三个网站,各占一个窗口

打开淘宝搜索页 → web_taobao
打开京东搜索页 → web_jd
打开拼多多搜索页 → web_pdd

第二步:分别在三个窗口输入搜索关键词

切换到 web_taobao,填写搜索框,点击搜索
切换到 web_jd,填写搜索框,点击搜索
切换到 web_pdd,填写搜索框,点击搜索

第三步:分别采集三个窗口的搜索结果

切换到 web_taobao,采集前10个商品价格
切换到 web_jd,采集前10个商品价格
切换到 web_pdd,采集前10个商品价格

第四步:数据汇总分析

在这里插入图片描述

[video(video-j5j7e3NE-1782670495161)(type-csdn)(url-live.csdn.net/v/embed/524…)]

把三个来源的数据合并到一个数据表里。

计算平均价格、最低价、最高价。

第五步:导出Excel报表

用"数据表写入Excel"指令,导出对比报表。


模块十:系统联动——多窗口与本地文件

多窗口采集的数据,往往需要保存到本地文件或推送到其他系统。

联动一:每个窗口的数据存一个Sheet

用"数据表写入Excel"指令,指定不同的工作表名称。

比如:淘宝数据存"淘宝" Sheet,京东数据存"京东" Sheet。

联动二:多窗口截图保存

每个窗口采集完数据后,用pyautogui截图保存。

图片文件名带上窗口标识和时间戳,方便追溯。

联动三:多窗口处理结果汇总邮件

所有窗口都处理完后,汇总处理结果,用"发送邮件"指令发送汇总邮件。


在这里插入图片描述

模块十一:工程化规范

多窗口操作的工程化规范非常重要,否则流程极易出错。

规范一:网页对象变量命名规范

必须有意义,格式:web_网站名_页面名

禁止使用 web1、web2 这种无意义命名。

规范二:切换窗口后必须确认

每次"切换网页对象"之后,用"获取当前网页URL"指令确认切换成功。

URL和预期不符,说明切换失败,记录错误日志。

规范三:所有打开的窗口必须有关闭逻辑

不要依赖流程结束自动关闭,要在流程里显式关闭每个窗口。

用"尝试捕获错误"指令包住关闭窗口的逻辑,避免关闭失败导致流程异常。

规范四:多窗口操作必须加日志

每次切换窗口、每次在新窗口上操作,都记录日志。

日志格式:[时间] [窗口标识] [操作描述]


模块十二:速查表与常见报错

多窗口操作指令速查

在这里插入图片描述

操作指令名称位置
打开网页(新标签/新窗口)打开网页网页自动化
获取指定网页对象获取已打开的网页对象网页自动化
获取所有网页对象获取所有已打开的网页对象网页自动化
切换网页对象切换网页对象(激活网页对象)网页自动化
关闭网页对象关闭网页对象网页自动化
获取当前网页URL获取网页信息网页自动化

常见报错排查

报错现象原因解决方案
操作在了错误的窗口上没有指定网页对象,或切换失败每个操作都明确指定网页对象变量
新窗口打开后找不到没有重新获取网页对象新窗口打开后用"获取已打开的网页对象"重新获取
切换到窗口后操作超时窗口已关闭或页面已刷新切换后先检查URL,确认窗口有效再操作
多窗口运行时内存溢出窗口开太多没关闭控制同时打开的窗口数量,及时关闭不用了的窗口
无头模式的元素定位失败无头模式某些CSS不加载改用标准模式调试通后再切无头模式

窗口对象变量管理速查

web_网站名_页面名    推荐命名格式
web_baidu_home         百度首页
web_baidu_search       百度搜索结果页
web_jd_product         京东商品详情页
web_admin_order         后台订单管理页

总结

多标签页和多窗口操作,核心就是:明确每个网页对象的变量名,切换时显式指定,操作完及时关闭。

不要依赖"当前激活窗口"这种隐性状态,要显式管理每一个窗口对象。

多窗口 + 无头模式,是大规模数据采集的标配方案。

把这篇文章的速查表保存好,多窗口操作就不再混乱。

更多多窗口高级技巧,可以访问 home.linyan.cloud 查看专题内容。


#影刀RPA #RPA教程 #多标签页 #多窗口 #窗口切换 #后台浏览器 #影刀新手 #RPA零基础

作者:林焱