使用Selenium提取指定div内img标签data-attachment-id属性的方法咨询
核心定位逻辑
使用//div[contains(@class,"entry-content clearfix")]//img作为Xpath定位表达式即可满足需求:
- 不需要绑定固定post编号,直接通过目标div的class属性定位父容器
- 表达式中
//img的双斜杠会匹配div下所有层级的img元素,无需写明中间节点结构
修正后完整代码
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome('my_path') driver.get('https://website') wait = WebDriverWait(driver, 20) # 等待目标父容器加载完成 wait.until(EC.presence_of_element_located((By.XPATH, '//div[contains(@class,"entry-content clearfix")]'))) # 匹配父容器内所有img元素 img_elements = driver.find_elements(By.XPATH, '//div[contains(@class,"entry-content clearfix")]//img') # 提取所有data-attachment-id属性值 attachment_id_list = [] for img in img_elements: current_id = img.get_attribute("data-attachment-id") if current_id: attachment_id_list.append(current_id) # 输出/返回结果 print(attachment_id_list) # return attachment_id_list
关键注意点
- 原有代码使用
.text提取img属性是错误的,img为单标签无内部文本,自定义属性需要通过get_attribute()方法获取 - 使用
contains(@class, "类名")匹配class属性,可以避免属性前后存在多余空格、后续追加其他类名导致的匹配失败问题 - 提取多个元素时需要使用复数形式的
find_elements方法,find_element仅返回第一个匹配到的元素 - 显式等待需要先判定父容器加载完成,再查找内部元素,避免页面未渲染完成导致的查找超时问题
内容的提问来源于stack exchange,提问作者Math
相关产品推荐
相关产品推荐

