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

1. 场景描述

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

  • 点击导出 → 站点新开一个临时页面
  • 临时页面触发下载 → 关闭自身
  • Playwright 捕获 expect_popupexpect_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
  • 解决方案是:别依赖新页,用下载事件兜底,或者加启动参数避免拦截。
相关推荐
小白学大数据5 小时前
Python爬虫数据可视化:深度分析贝壳成交价格趋势与分布
爬虫·python·信息可视化
johnny2331 天前
爬虫汇总与实战
爬虫
一晌小贪欢1 天前
Python爬虫第5课:正则表达式与数据清洗技术
爬虫·python·正则表达式·网络爬虫·python爬虫·python3·网页爬虫
打酱油的;1 天前
【无标题】
爬虫·python·php
Amazon数据采集1 天前
🚀 Pangolin Scrape API实战指南:从0到1构建高性能亚马逊数据采集系统
爬虫·自动化运维
DataLaboratory2 天前
Python爬取百度地图-前端直接获取
爬虫·python·百度地图
APIshop2 天前
代码实例:Python 爬虫抓取与解析 JSON 数据
爬虫·python·json
一晌小贪欢2 天前
Python爬虫第4课:XPath与lxml高级解析技术
开发语言·爬虫·python·网络爬虫·python爬虫·python3·python办公
一晌小贪欢2 天前
Python爬虫第3课:BeautifulSoup解析HTML与数据提取
爬虫·python·网络爬虫·beautifulsoup·python爬虫·python3·requests
小白学大数据3 天前
Python爬虫常见陷阱:Ajax动态生成内容的URL去重与数据拼接
爬虫·python·ajax