使用Python Chrome Driver捕获Wayback Machine截图时左右留白问题求助
解决Wayback Machine网页截图左右留白问题
你的代码用Chrome Headless模式截图时出现左右留白,是因为Wayback Machine把存档网页放在了特定容器里,默认窗口设置没匹配到存档页面的实际宽度。以下是调整方案:
核心调整思路
- 弃用
--start-maximized,根据存档页面的实际内容宽度设置窗口尺寸 - 替换固定
time.sleep()为显式等待,确保页面完全加载 - 直接截取存档内容的容器元素,而非整个浏览器窗口
修改后的代码
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import pandas as pd df_merged_new_url = pd.read_csv(path_to_csv) chrome_options = Options() chrome_options.add_argument('--headless=new') # 新版Headless更贴近正常浏览器渲染效果 chrome_options.add_argument('--disable-gpu') driver = webdriver.Chrome(executable_path='./chromedriver', options=chrome_options) # 循环处理CSV中的每条链接 for idx, row in df_merged_new_url.iterrows(): driver.get(row["new_url"]) # 等待存档内容容器加载完成,最长等待20秒 wait = WebDriverWait(driver, 20) archive_content = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.archive-content'))) # 获取内容容器的实际尺寸,加少量余量避免裁剪 content_width = archive_content.size['width'] + 20 content_height = archive_content.size['height'] + 20 # 调整窗口尺寸匹配内容 driver.set_window_size(content_width, content_height) # 直接截取内容容器的截图,精准匹配存档网页显示范围 archive_content.screenshot(f"screenshot_{idx}.png") # 替换为你的实际存储路径 driver.quit()
关键说明
--headless=new是Chrome新版无头模式,渲染逻辑和正常浏览器更一致,能减少显示差异- 显式等待
.archive-content元素加载完成,比固定等待时间更可靠,避免页面未加载完全就截图 - 直接截取存档内容容器,彻底规避浏览器窗口自带的留白问题,截图效果和正常访问页面一致
内容的提问来源于stack exchange,提问作者Gaganpreet Singh
相关产品推荐
相关产品推荐

