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

Selenium截取元素截图抛出WebDriverException错误求助

解决方案:谷歌图片搜索元素截图报错问题

问题分析

你遇到的WebDriverException: unknown command错误,核心原因多为ChromeDriver与Chrome浏览器版本不兼容,同时代码存在两处基础问题:未导入Keys模块、使用了易失效的绝对XPath定位。

修复步骤

1. 补全代码缺失模块

代码中使用Keys.ENTER但未导入对应模块,需添加:

from selenium.webdriver.common.keys import Keys

2. 匹配ChromeDriver与Chrome版本

ChromeDriver版本必须和本地Chrome浏览器主版本号完全一致(比如Chrome是124.x,ChromeDriver也要选124.x系列),版本不匹配会直接引发未知命令类错误。

3. 替换为稳定的元素定位

谷歌图片页面结构频繁更新,绝对XPath极易失效,改用更稳定的CSS选择器定位首个搜索结果图片:

# 引入显式等待,避免元素未加载完成就操作
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 等待首个图片元素加载
first_img = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "div.isv-r.PNCib.MSM1fd.BUooTd img"))
)
first_img.screenshot('user_path/test.png')

4. 替代方案:直接下载图片(更可靠)

若元素截图仍报错,可跳过WebDriver截图逻辑,直接获取图片URL下载:

import requests

img_url = first_img.get_attribute('src')
resp = requests.get(img_url)
with open('user_path/test.png', 'wb') as f:
    f.write(resp.content)

完整可运行代码

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import requests

driver = webdriver.Chrome()
driver.get('https://images.google.com/')

# 定位搜索框并执行搜索
search_box = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.NAME, "q"))
)
search_box.send_keys('Giraffe')
search_box.send_keys(Keys.ENTER)

# 等待首个图片加载
first_img = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "div.isv-r.PNCib.MSM1fd.BUooTd img"))
)

# 尝试元素截图,失败则用下载方案
try:
    first_img.screenshot('user_path/test_element.png')
except Exception as e:
    print(f"元素截图失败:{e}")
    img_src = first_img.get_attribute('src')
    if img_src:
        resp = requests.get(img_src)
        with open('user_path/test_download.png', 'wb') as f:
            f.write(resp.content)
        print("已通过下载方式保存图片")

driver.quit()

内容的提问来源于stack exchange,提问作者Benjamin Zeisberg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:20:38