Firefox下载提示干扰Selenium脚本运行问题求助
解决Firefox下载按钮提示框干扰Selenium脚本的问题
方案一:补充Firefox偏好设置,彻底抑制提示或隐藏下载按钮
你当前的偏好设置覆盖不全,可以新增以下配置,要么直接关闭下载完成的提示,要么自动隐藏工具栏上的下载按钮:
修改后的代码:
# Python version = 3.12.3 # Selenium version = 4.22.0 # Firefox version = 128.0 options = FFOptions() # 保留原有设置 options.set_preference("browser.download.panel.shown", False) options.set_preference("browser.download.alwaysOpenPanel", False) options.set_preference("browser.download.manager.showWhenStarting", False) options.set_preference("browser.download.manager.focusWhenStarting", False) options.set_preference("browser.download.manager.showAlertOnComplete", False) options.set_preference("browser.download.manager.useWindow", False) # 新增配置:关闭下载完成通知 options.set_preference("browser.download.manager.notifyWhenComplete", False) # 禁用下载面板动画和按钮提示 options.set_preference("browser.download.panel.animateNotifications", False) options.set_preference("browser.download.panel.disableButton", True) # 关键配置:通过UI定制状态直接隐藏工具栏上的下载按钮 # 该值为Firefox存储工具栏布局的JSON字符串,已移除下载按钮 options.set_preference("browser.uiCustomization.state", '{"placements":{"widget-overflow-fixed-list":["downloads-button","bookmarks-menu-button","history-panelmenu","fullscreen-button","find-button","developer-button"],"nav-bar":["back-button","forward-button","stop-reload-button","home-button","urlbar-container"],"toolbar-menubar":["menubar-items"],"TabsToolbar":["tabbrowser-tabs","new-tab-button","alltabs-button"],"PersonalToolbar":["personal-bookmarks"]},"seen":["developer-button"],"dirtyAreaCache":["nav-bar","toolbar-menubar","TabsToolbar","PersonalToolbar","widget-overflow-fixed-list"],"currentVersion":16,"newElementCount":2}') service = FFService(executable_path="/snap/bin/geckodriver") self.driver = webdriver.Firefox(options=options, service=service)
说明:如果上述
browser.uiCustomization.state不兼容你的Firefox版本,可以手动移除下载按钮后,在about:config中找到对应值复制替换。
方案二:执行JavaScript隐藏下载按钮(偏好设置无效时备选)
如果偏好设置不生效,可在浏览器启动后立即执行一段JS隐藏下载按钮:
# 启动浏览器后执行 self.driver.execute_script(""" const downloadButton = document.querySelector('#downloads-button'); if (downloadButton) { downloadButton.style.display = 'none'; } """)
方案三:处理弹出的提示框(兜底方案)
如果前两种方案都失效,可以显式等待提示框出现并关闭:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 第一个文件下载完成后,等待并关闭可能出现的提示框 try: alert = WebDriverWait(self.driver, 5).until(EC.alert_is_present()) alert.accept() except: # 无提示框则继续执行 pass
内容的提问来源于stack exchange,提问作者user1994584
相关产品推荐
相关产品推荐

