如何在Selenium中仅允许部分文件下载?
解决Selenium Firefox仅下载指定视频文件的方案
针对你的需求,分两种场景给出解决方案:
场景1:点击按钮后浏览器自动触发全部4个文件下载
这种情况需要通过配置Firefox的下载偏好,限制仅自动下载指定MIME类型的视频文件,拒绝文本文件的自动下载。
步骤:
- 确定你需要下载的视频文件对应的MIME类型,常见视频类型的MIME值参考:
- MP4:
video/mp4 - MKV:
video/x-matroska - AVI:
video/x-msvideo - MOV:
video/quicktime
- MP4:
- 在你的Selenium配置中添加以下偏好设置,替换成你实际的视频MIME类型:
options = Options() options.headless = False options.profile = r"C:\Users\Profiles\osdf86s" download_dir = r'C:\Users\Downloads' # 核心下载偏好配置 options.set_preference("browser.download.dir", download_dir) options.set_preference("browser.download.folderList", 2) # 指定自动保存的视频MIME类型(多个用逗号分隔) options.set_preference("browser.helperApps.neverAsk.saveToDisk", "video/mp4,video/x-matroska") # 禁止对指定类型弹出下载询问 options.set_preference("browser.helperApps.alwaysAsk.force", False) # 隐藏下载管理器弹窗(可选) options.set_preference("browser.download.manager.showWhenStarting", False) # 阻止非指定类型的自动下载(可选,若浏览器仍下载文本文件可添加) options.set_preference("browser.download.manager.alertOnEXEOpen", False) options.set_preference("browser.download.manager.focusWhenStarting", False) options.set_preference("browser.download.manager.useWindow", False) options.set_preference("browser.download.manager.showAlertOnComplete", False) options.set_preference("browser.download.manager.closeWhenDone", False) s = Service(GeckoDriverManager().install()) driver = webdriver.Firefox(service=s, options=options)
说明:
- 把
browser.helperApps.neverAsk.saveToDisk的值替换为你需要的视频MIME类型,多个类型用英文逗号分隔。 - 若文本文件仍被自动下载,可检查文本文件的MIME类型(比如TXT是
text/plain),确保未加入到自动保存列表中。
场景2:点击按钮后页面显示4个下载选项(如4个下载按钮/链接)
这种情况无需修改下载偏好,直接定位到对应的两个视频下载按钮并点击即可,忽略文本文件的下载选项。
示例代码(假设视频下载按钮文本为"下载视频1"、"下载视频2"):
# 点击触发下载选项的按钮 driver.find_element(By.CSS_SELECTOR, "触发按钮的选择器").click() # 定位并点击第一个视频下载按钮 driver.find_element(By.XPATH, "//button[text()='下载视频1']").click() # 定位并点击第二个视频下载按钮 driver.find_element(By.XPATH, "//button[text()='下载视频2']").click()
说明:
- 需根据实际页面的HTML结构,替换按钮的定位方式(如CSS选择器、XPath、ID等)。
- 若下载需要等待,可添加
WebDriverWait等待元素加载完成后再点击。
内容的提问来源于stack exchange,提问作者John Hon
相关产品推荐
相关产品推荐

