影刀RPA 浏览器自动化中的弹窗处理大全:alert、confirm、prompt、自定义弹窗

影刀RPA 浏览器自动化中的弹窗处理大全:alert、confirm、prompt、自定义弹窗
影刀RPA 浏览器自动化中的弹窗处理大全alert、confirm、prompt、自定义弹窗浏览器的弹窗是自动化路上最烦人的障碍之一。系统弹窗alert/confirm/prompt还好说自定义弹窗花样百出——登录浮层、订阅提示、抽奖轮盘、优惠券领取……每个网站的弹窗都是独特的。这篇文章把弹窗分四类每类给出一套处理方案。弹窗四分类类型来源特征影刀能否自动处理系统弹窗浏览器原生alert()/confirm()/prompt()灰色模态框不关闭无法操作页面影刀自动接管自定义模态弹窗网页JSCSS实现居中浮层半透明遮罩需要手动关闭| 非模态弹窗 | 右下角/顶部浮窗 | 不阻塞页面操作 | 可能不需要处理 || 新窗口弹窗 |window.open()| 打开新标签页/新窗口 | 需要切换窗口 |第一类系统弹窗最典型的场景点击某个按钮后浏览器弹出一个原生弹窗alert → 操作成功 [确定] confirm → 确定要删除吗 [确定] [取消] prompt → 请输入姓名 [输入框] [确定] [取消]好消息影刀内置了对系统弹窗的自动处理。当页面上出现alert()、confirm()、prompt()时影刀的浏览器驱动会自动接管。流程不会因为弹窗而卡住——影刀默认会自动点击确定关掉alert对confirm也默认返回true。如果你想让影刀在confirm弹窗里点取消可以在触发confirm的操作之前用【执行JS】覆盖// 重写confirm让它永远返回false取消window.confirmfunction(){returnfalse;};![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/17f53766a3a24d488ab1998c3da6236d.png#pic_center)在影刀里执行完这段JS之后后续所有confirm()弹窗都会自动按取消处理。prompt弹窗比较特殊——如果页面上有prompt()让你输入东西影刀默认会输入空字符串。如果你需要输入特定内容同样用JS覆盖window.promptfunction(){return我想输入的内容;};一个常见踩坑有些网站在你操作过程中会突然弹一个alert——比如表单验证失败时弹请填写手机号。如果不处理影刀会自动关掉这个alert继续往下跑但表单验证没通过后面的操作全是无效的。拼多多店群自动化报活动上架处理方式在可能触发alert的步骤前后加验证逻辑。与其依赖alert的内容不如主动检查页面上的错误提示文本。第二类自定义模态弹窗这一类的特点是居中显示背后有半透明遮罩不关闭就点不到下面的内容。形式上像系统弹窗但实际上是用HTMLCSS实现的。常见场景登录/注册浮层“领取新人优惠券”“订阅我们的推送通知”Cookie同意横幅“给我们打分”处理策略分为三步第一步检测弹窗是否出现# 流程逻辑【打开网页】→ 目标页面 【等待2秒】# 给弹窗一点时间出现# 尝试检测弹窗【IF】弹窗关闭按钮存在:→ 关闭弹窗 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1c1a022260774df38363c28e9a0f94fb.png#pic_center)【ELSE IF】弹窗的关闭X按钮存在:→ 点击关闭 【END IF】# 弹窗关闭后继续正常流程检测一个元素是否存在而不报错的方法——用忽略错误模式。影刀里某些版本的动作有元素未找到时不报错的选项勾上就行。或者用【执行JS】来检测// 检测弹窗是否存在varpopupdocument.querySelector(.coupon-popup);returnpopup!nullpopup.style.display!none;第二步关闭弹窗关闭弹窗的优先级点击关闭X 点击取消/暂不 点击遮罩层 JS暴力移除。按这个优先级来因为点击关闭X最安全网站能正常记录用户已关闭弹窗点击遮罩层有些弹窗支持这个操作有些不支持JS暴力移除效果最快但可能导致网站的逻辑状态混乱比如弹窗被JS移除后某些全局状态没更新// 方案1点击关闭按钮document.querySelector(.close-btn).click();// 方案2直接移除弹窗DOMvarpopupdocument.querySelector(.modal);if(popup)popup.remove();// 方案2附赠移除遮罩层否则点不了下面的内容varoverlaydocument.querySelector(.modal-overlay);if(overlay)overlay.remove();第三步确认弹窗已关闭弹窗关闭后验证一下遮罩层是否也消失了。有些网站在关闭弹窗的炫酷动画还没播完但DOM还在。这时候你的流程去点底下的按钮可能会点到残留的遮罩上。【等待元素】→ 等待遮罩层消失反着来等待不存在 【等待0.5秒】# 动画缓冲【操作目标元素】第三类非模态弹窗右下角的客服在线、顶部的限时优惠横幅、侧边栏的回到顶部按钮——这些不阻塞页面操作但也可能影响你的采集。处理策略如果弹窗不遮挡你的目标元素不用处理。如果遮挡了比如右下角的客服图标刚好盖住了你要点的按钮建议把它移除掉。// 移除所有固定定位的浮动元素varfixedElementsdocument.querySelectorAll([style*position:![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e4760dd0dab847e5b117884d410814cd.png#pic_center)fixed]);fixedElements.forEach(elel.remove());但是注意——这个操作比较暴力可能把页面上真正需要的东西比如导航栏也移除了。所以还是建议针对性处理// 只移除客服弹窗varcsPaneldocument.querySelector(#customer-service-panel);if(csPanel)csPanel.remove();第四类新窗口弹窗点击某个链接或按钮后浏览器打开了一个新标签页。这不是传统意义上的弹窗但在自动化流程里同样需要处理。处理策略【点击元素】→ 触发新窗口打开的链接# 新窗口打开了影刀当前还在原窗口【切换标签页】→ 切换到最新打开的标签页通常是索引最后一个# 在新窗口里操作...【获取元素文本】# 操作完成关掉新窗口【关闭网页】# 回到原窗口【切换标签页】→ 切换到原来的标签页标签页切换的注意事项按索引切换切换到第3个标签页索引从0开始0是第一个标签按标题切换切换到标题包含订单详情的标签页更可靠不受标签顺序影响新打开的标签页加载需要时间切换后记得加等待实战案例电商后台的登录弹窗处理TEMU店群矩阵自动化运营核价报活动一个真实的处理流程1. 【打开网页】→ 电商后台首页 2. 【等待 3 秒】 页面加载完会有三种可能的弹窗 - 登录浮层未登录状态 - 活动弹窗已登录状态 - 系统公告弹窗任何状态都可能 3. 检测弹窗类型 【执行JS】→ 检测页面上的弹窗 if (document.querySelector(.login-modal)): 弹窗类型 登录 elif (document.querySelector(.activity-popup)): 弹窗类型 活动 elif (document.querySelector(.announcement)): 弹窗类型 公告 else: 弹窗类型 无 4. 根据类型处理 IF 弹窗类型 登录: 【填写】用户名 【填写】密码 【点击】登录按钮 【等待元素】→ 等待登录弹窗消失 ELIF 弹窗类型 活动: 【点击】关闭按钮 【等待元素】→ 等待弹窗消失 ELIF 弹窗类型 公告: 【点击】我知道了 按钮 【等待元素】→ 等待弹窗消失 5. 确认所有弹窗已关闭开始正常操作这个流程的核心是检测弹窗类型——不能假设每次都是同一种弹窗。用JS检测页面上的弹窗元素然后分类处理。三个绕不开的坑坑1弹窗关闭后还有残留遮罩有些弹窗关闭时只是隐藏了内容区display:none遮罩层还在。你点下面的按钮实际上点到了透明的遮罩上。// 关闭弹窗后确保遮罩也被移除varoverlaydocument.querySelector(.modal-backdrop);if(overlay)overlay.remove();// 同时恢复body的overflow有些弹窗打开时会设置overflow:hiddendocument.body.style.overflow;坑2弹窗的关闭按钮有动画延迟点了关闭按钮弹窗先执行一个淡出动画0.3秒-0.5秒动画播完才真正从DOM里移除。你的流程在点关闭后立即去找下面的元素元素还被弹窗挡着。解决方案点完关闭按钮后加一个等待逻辑【等待元素】→ 等待弹窗的class里出现hidden或弹窗消失 【等待 1 秒】→ 保险起见再等一下动画坑3弹窗的内容是异步加载的有些弹窗打开后里面的内容比如登录表单是通过AJAX加载的。弹窗的壳已经出现了但表单还没渲染出来。你这时候去填写用户名密码影刀会报元素未找到。解决方案弹窗出现后等待表单元素出现再去操作。【等待 5 秒】→ 等弹窗出现 【等待元素】→ 等待弹窗内的表单加载完成 【填写】→ 用户名输入框一句话总结系统弹窗影刀自动兜底自定义弹窗分检测→关闭→确认三步走。关键是在关闭弹窗后确认遮罩层也消失了不要急着操作被遮挡的元素。作者林焱

最新新闻

日新闻

周新闻

月新闻