Python版Selenium如何提取指定div标签data-userassetid属性引号内数值
基于Python Selenium提取自定义data属性值的实现方案
核心通用逻辑
所有元素的属性值提取,都无需手动爬取页面源码写正则拆分,定位到目标DOM元素后,直接调用元素对象的get_attribute()方法,传入目标属性名,即可拿到引号包裹的真实值。
该方法可覆盖所有同类属性提取场景,后续遇到其他data-开头的自定义属性提取需求,仅需修改get_attribute()传入的属性名即可,无需调整整体逻辑。
对应示例场景的可运行代码
目标示例元素为:<div class = "item-card-container" data-userassetid = "50904623348">
单个元素提取
当页面仅存在1个匹配class的目标元素时,直接定位取值即可:
from selenium import webdriver from selenium.webdriver.common.by import By # 浏览器驱动初始化、跳转目标页面的常规流程 driver = webdriver.Chrome() driver.get("待爬取的目标页面地址") # 用CSS选择器定位元素,传入属性名提取值 target_card = driver.find_element(By.CSS_SELECTOR, "div.item-card-container") user_asset_id = target_card.get_attribute("data-userassetid") # 打印结果,对应示例将输出 50904623348 print(user_asset_id)
多元素批量提取
当页面存在多个同类型的卡片元素、需要提取所有对应属性值时,使用复数定位方法遍历取值:
asset_id_list = [] # 定位页面所有匹配的卡片元素 all_cards = driver.find_elements(By.CSS_SELECTOR, "div.item-card-container") for card in all_cards: asset_id = card.get_attribute("data-userassetid") asset_id_list.append(asset_id) print(asset_id_list)
稳定性优化注意点
- 如果目标元素是前端异步渲染加载的,直接定位会抛出元素不存在的异常,需要搭配显式等待,等元素加载完成后再执行取值操作,对应示例代码:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 最长等待10秒,等目标元素加载完成 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, "div.item-card-container")) )
- 相较于手动匹配页面源码的方式,这种方法拿到的是浏览器渲染后的真实DOM属性值,不会被前端动态替换属性值、异步加载内容的逻辑影响,适配性更强。
内容的提问来源于stack exchange,提问作者ExoticLegend714
相关产品推荐
相关产品推荐

