Azure Databricks中Selenium网页截图空白问题排查求助
问题分析与解决方法
核心错误点
- 未触发页面访问:代码里定义了谷歌地址,但从未调用
driver.get(login_url)加载目标页面,截图的是浏览器初始空白页,这是空白截图的根本原因。 - 无头模式配置冲突:同时设置
options.headless = False和options.add_argument('--headless'),参数互相矛盾。Databricks无图形界面环境必须启用无头模式,建议用options.headless = True(符合Selenium官方API规范)。 - 等待逻辑错误:
time.sleep(20)放在初始化浏览器之后、页面访问之前,完全无法等待页面加载,应该移到页面访问操作之后。 - 无头模式缺少窗口尺寸:Firefox无头模式默认窗口极小,会导致截图空白,需手动指定窗口大小。
修正后的完整代码
from selenium import webdriver from selenium.webdriver.firefox.service import Service from selenium.webdriver.firefox.options import Options from webdriver_manager.firefox import GeckoDriverManager import time from IPython.display import Image # Temporary path screenshot_path = '/tmp/web.png' # Firefox controller configuration service = Service(executable_path=GeckoDriverManager().install()) options = Options() options.set_preference("browser.download.folderList", 2) options.set_preference("browser.download.manager.showWhenStarting", False) options.set_preference("browser.download.dir", '/tmp/head_count_data/') # 统一启用无头模式 options.headless = True # 添加无头模式必要的窗口尺寸参数 options.add_argument('--window-size=1920,1080') options.binary_location = '/tmp/firefox/firefox' driver = webdriver.Firefox(options=options, service=service) login_url = "https://www.google.com/" # 关键:访问目标页面 driver.get(login_url) # 等待页面加载完成 time.sleep(5) # Screenshot driver.save_screenshot(screenshot_path) # Show results Image(filename=screenshot_path) # 最后记得关闭浏览器 driver.quit()
额外注意事项
- 确保GeckoDriver版本与Firefox 106.0.1匹配,
webdriver-manager通常会自动适配,但如果仍有问题,可以手动指定版本:GeckoDriverManager(version="0.32.0").install()(Firefox 106对应GeckoDriver 0.32.0)。 - 避免过长的
time.sleep,可以改用Selenium的显式等待(如WebDriverWait),更高效稳定。
内容的提问来源于stack exchange,提问作者Xkid
相关产品推荐
相关产品推荐

