Firefox Selenium WebDriver截图异常:3000px高度截图不正确求助
问题:Ubuntu 22下Selenium 4+Firefox 102截取3000px高度网页不符合预期
在Ubuntu 22系统中,使用Selenium 4搭配Firefox 102浏览器,对https://allarahealth.com/ 截取高度3000px的页面截图,但结果不符合预期,无法判断是HTML布局还是Selenium配置导致的问题。
相关代码如下:
from seleniumwire import webdriver from selenium.webdriver.firefox.options import Options import time _w = 1440 _h= 3000 _ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0' opts = Options() opts.headless = True opts.add_argument(f"--height={_h}") opts.add_argument(f"--width={_w}") opts.add_argument("--hide-scrollbars") opts.add_argument('--no-sandbox') opts.add_argument('--disable-gpu') opts.add_argument('--disable-extensions') opts.add_argument('--disable-dev-shm-usage') opts.add_argument('--ignore-certificate-errors') opts.add_argument('--disable-blink-features') opts.add_argument('--disable-blink-features=AutomationControlled') opts.add_argument('--allow-running-insecure-content') opts.add_argument('disable-infobars') opts.set_preference('dom.webnotifications.enabled', True) opts.set_preference('dom.webnotifications.enabled', True) opts.set_preference("dom.webdriver.enabled", False) opts.set_preference("general.useragent.override", _ua) opts.set_preference("network.http.use-cache", False) opts.set_preference("browser.cache.memory.enable", False) opts.set_preference("browser.cache.disk.enable", False) opts.set_preference("browser.sessionhistory.max_total_viewers", 3) opts.set_preference("network.dns.disableIPv6", True) opts.set_preference("Content.notify.interval", 750000) opts.set_preference("content.notify.backoffcount", 3) opts.binary_location = r'/opt/firefox/firefox' ff_path = '/opt/geckodriver' brws = webdriver.Firefox(options=opts, executable_path=ff_path) time.sleep(1) brws.get('https://allarahealth.com/') brws.save_screenshot('screen.png') brws.close()
截图显示页面未按预期截取(存在截断或布局异常)。
排查方向与解决办法
1. 修正窗口尺寸设置方式
Firefox headless模式下,--height启动参数可能无法生效,改用Selenium原生的窗口尺寸设置方法替换启动参数:
# 移除这两行启动参数 # opts.add_argument(f"--height={_h}") # opts.add_argument(f"--width={_w}") brws = webdriver.Firefox(options=opts, executable_path=ff_path) # 初始化后设置窗口尺寸 brws.set_window_size(_w, _h)
2. 确保页面完全加载
替换time.sleep(1)为显式等待,保证页面所有静态和动态内容加载完成后再截图:
from selenium.webdriver.support.ui import WebDriverWait brws.get('https://allarahealth.com/') # 等待页面加载完成 WebDriverWait(brws, 10).until( lambda driver: driver.execute_script('return document.readyState') == 'complete' )
3. 处理动态滚动加载内容
部分网站会在滚动时加载新内容,需先滚动到页面底部等待加载完成:
# 滚动到页面底部触发动态加载 brws.execute_script("window.scrollTo(0, document.body.scrollHeight);") # 等待内容加载,可根据页面元素调整等待逻辑 time.sleep(3)
4. 使用完整页面截图API
Selenium 4为Firefox提供了原生完整页面截图方法,替代save_screenshot:
brws.full_page_screenshot('screen.png')
5. 调整Firefox渲染偏好
添加以下偏好设置,解除headless模式下的渲染限制:
opts.set_preference("layout.css.devPixelsPerPx", "1.0") opts.set_preference("browser.tabs.remote.autostart", False) opts.set_preference("dom.max_script_run_time", 0)
内容的提问来源于stack exchange,提问作者Denis
相关产品推荐
相关产品推荐

