You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 15:19:21