Playwright 下载文件时页面被 Chrome 过滤的问题

1. 场景描述

在 RPA 或爬虫中,点击页面上的「导出」按钮时,正常流程是:

  • 点击导出 → 站点新开一个临时页面
  • 临时页面触发下载 → 关闭自身
  • Playwright 捕获 expect_popup 或 expect_download → 保存文件

但是在 谷歌浏览器(尤其是带安全策略的版本) 中,这种临时下载页有时会被 自动过滤/关闭 。

结果导致:

  • expect_popup() 捕获不到新页面,报错

  • 报错信息:

    r 复制代码
    Target page, context or browser has been closed
  • 文件有时能下,有时完全丢失。


2. 产生原因

  • Chrome 将下载跳转页识别为 弹窗,直接拦截关闭。
  • 导致 Playwright 监听的新页面「还没来得及挂钩,就被关闭了」。

3. 解决思路

方法一:只监听 expect_download(推荐)

如果下载操作 不依赖新页面 ,可以只写 expect_download:

ini 复制代码
with page.expect_download(timeout=60000) as download_info:
    page.get_by_role("button", name="导出").click()
download = download_info.value
download.save_as("保存路径.xlsx")

这样即使 Chrome 把临时页面过滤掉,仍然能捕获下载事件。


方法二:新页面 + 下载双保险

有些网站必须开新页才能下载,这时需要同时监听:

ini 复制代码
try:
    with page.expect_popup() as popup_info:
        with page.expect_download(timeout=60000) as download_info:
            page.get_by_role("button", name="导出").click()
    popup = popup_info.value
    download = download_info.value
except Exception as e:
    # 如果新页面被 Chrome 过滤,退回到普通下载
    with page.expect_download(timeout=60000) as download_info:
        page.get_by_role("button", name="导出").click()
    download = download_info.value

download.save_as("保存路径.xlsx")

这样即便 新页面被过滤 ,也能退回到 expect_download 兜底。


方法三:优化 Chrome 启动参数

在启动 Chrome 时加上以下参数,减少下载页面被过滤的概率:

python 复制代码
command = [
    r"C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe",
    r"--remote-debugging-port=9222",
    r"--disable-popup-blocking",   # 禁用弹窗拦截
    r"--no-sandbox",
    r"--start-maximized"
]

4. 最佳实践

  1. 优先使用 expect_download → 更稳定。
  2. 必须新页面时 → 新页监听 + 普通下载兜底。
  3. 浏览器启动参数优化 → 禁用 popup 拦截。

5. 总结

这个问题的核心是:

  • Chrome 自动关闭了下载跳转页
  • Playwright 捕获不到新页面,报 Target page closed
  • 解决方案是:别依赖新页,用下载事件兜底,或者加启动参数避免拦截。
相关推荐
深蓝电商API18 小时前
LLM正在改变爬虫:Crawl4AI源码深度解析
爬虫·crawl4ai
Chengbei113 天前
JsOwl|AI 赋能 JS 敏感信息扫描器,AST + 正则、source‑map 源码还原、登录态爬虫输出交互式 HTML 报告
开发语言·javascript·网络·人工智能·爬虫·网络安全·自动化
远航计算机3 天前
AI 答案里的链接,为什么开始分等级了?
大数据·人工智能·爬虫·aigc
Novproxy_Z3 天前
爬虫任务被拦截:区分 IP 封禁、设备封禁、账号封禁
爬虫·网络协议·tcp/ip
郝学胜-神的一滴3 天前
Python浏览器自动化:Selenium与Playwright实战对比,网页爬虫&自动操作一站式指南
开发语言·爬虫·python·selenium·程序人生·自动化
Python大数据分析@3 天前
通过 MCP 实现 AI Agent自动化数据采集
运维·人工智能·爬虫·自动化
深蓝电商API3 天前
Docker+K8s部署爬虫:从单机到集群的完整路线
爬虫·docker·k8s
深蓝电商API4 天前
亿级数据的存储选型:MongoDB/ES/ClickHouse横评
爬虫·clickhouse·mongodb·elasticsearch
重生之高冷汉堡包4 天前
YouTube 数据抓取出现 429/403 错误?2026 反爬机制拆解与爬虫选型指南
爬虫
钱栈up4 天前
扫完 3.5 万文件后,我发现了 521 组散落的同名文件
爬虫·python·数据分析