You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Chrome Headless爬虫:如何通过启动参数禁用自动下载?

解决Chrome Headless爬虫自动下载文件的方法

当然可以搞定这个问题!我给你整理了几个实用的方案,都是爬虫场景下亲测有效的:

方案一:使用Chrome启动参数直接禁用下载

Chrome提供了专门的启动参数来限制下载行为,--download-restrictions=3 这个参数能直接禁止所有下载操作,是最简单直接的办法。

命令行启动示例:

google-chrome --headless=new --download-restrictions=3 --disable-gpu https://www.example.com

Selenium 代码示例(Python):

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--headless=new")
options.add_argument("--download-restrictions=3")
options.add_argument("--disable-gpu")

driver = webdriver.Chrome(options=options)
driver.get("https://www.example.com/file.zip")
# 现在不会自动触发文件下载了

这个参数的取值说明:

  • 0:无限制(默认行为)
  • 1:仅限制下载危险文件
  • 2:限制下载潜在危险文件
  • 3:完全禁止所有下载

方案二:通过DevTools协议禁用下载功能

如果启动参数不够灵活,你可以通过Chrome DevTools协议(CDP)动态配置下载行为,适合需要在运行时调整的场景。

Selenium + CDP 示例:

from selenium import webdriver

driver = webdriver.Chrome()
# 全局禁用下载功能
driver.execute_cdp_cmd("Page.setDownloadBehavior", {
    "behavior": "deny"
})
driver.get("https://www.example.com/file.zip")

Playwright 代码示例(Python):

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    # 设置禁止下载
    page.set_download_behavior(behavior="deny")
    page.goto("https://www.example.com/file.zip")
    browser.close()

方案三:拦截特定下载请求(更灵活)

如果只是想阻止特定类型的文件(比如zip、exe),而非全部下载,可以通过拦截网络请求来实现精准控制:

Selenium + CDP 请求拦截示例:

from selenium import webdriver

def handle_intercepted_request(request_data):
    interception_id = request_data["interceptionId"]
    request_url = request_data["request"]["url"]
    # 拦截所有zip格式的下载请求
    if request_url.endswith(".zip"):
        driver.execute_cdp_cmd("Network.continueInterceptedRequest", {
            "interceptionId": interception_id,
            "errorReason": "BlockedByClient"
        })
    else:
        driver.execute_cdp_cmd("Network.continueInterceptedRequest", {
            "interceptionId": interception_id
        })

driver = webdriver.Chrome()
# 启用网络请求拦截
driver.execute_cdp_cmd("Network.enable", {})
driver.execute_cdp_cmd("Network.setRequestInterception", {"patterns": [{"urlPattern": "*"}]})
driver.add_listener("Network.requestIntercepted", handle_intercepted_request)

driver.get("https://www.example.com/file.zip")

这个方案可以根据文件后缀、URL特征等自定义拦截规则,适合复杂的爬虫场景。

内容的提问来源于stack exchange,提问作者nope123

火山引擎 最新活动