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




