Python使用Selenium获取img标签src属性报错如何解决
问题原因
你的代码存在4个核心错误:
- 未访问目标页面:初始化Chrome驱动后,没有调用
driver.get("目标页面地址")打开要爬取的网页,浏览器默认打开空白页,自然找不到目标img元素。 - 元素查找方法用错:
find_elements(带s)返回的是所有匹配元素组成的列表,列表对象本身没有src属性,直接调用取属性必然报错。要取单个元素请用find_element(单数形式),如果要取多个元素的src需要遍历返回的列表逐个获取。 - 定位器写法错误:
- 你写的绝对XPath
/html/body/...容错性极差,页面DOM结构稍有变动就会定位失败 - 你写的CSS选择器带
:before伪元素,伪元素是CSS渲染生成的,不是真实存在的DOM节点,根本无法通过Selenium定位到,更不可能拿到src属性 - 你定义的
img_class是外层包裹div的类名,不是img标签本身的类名,用这个定位拿到的是div元素,div天然没有src属性
- 你写的绝对XPath
- 缺少元素等待:页面加载、元素渲染需要时间,打开页面后立刻定位元素,很可能元素还没加载完成,导致定位失败。
另外不建议直接调用元素的__getattribute__取属性,Selenium提供了get_attribute()方法专门用来获取元素属性,兼容性更好,对动态加载的属性也能正确读取。
修正后的示例代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(ChromeDriverManager().install()) # 替换成你要访问的实际页面地址 driver.get("你的目标页面URL") try: # 显式等待最多10秒,等目标img元素加载完成 # 优先用相对定位,比如根据img的类名、alt属性等定位,稳定性远高于绝对XPath item_img = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.XPATH, '//img[contains(@class, "thumbnail_thumb")]')) ) img_src = item_img.get_attribute('src') print(img_src) finally: driver.quit()
内容的提问来源于stack exchange,提问作者R song
相关产品推荐
相关产品推荐

