如何用Python Selenium随机识别两类行并提取目标属性?
解决Selenium随机行的类型判断与数据提取问题
核心思路
先定位到指定的main节点,获取其下所有行元素,再逐个判断行类型(Type A/Type B),最后提取对应属性。无需依赖固定行索引,完美适配行的随机顺序与数量。
实现步骤与代码
- 等待主节点加载并获取所有行元素
先确保主容器节点加载完成,再获取其下所有行级元素(根据你的DOM结构,行元素是main节点下的div子元素)。 - 遍历行元素,判断类型并提取数据
- 对每个行元素,先获取
class属性判断是否为Type A; - 若不是,再检查
tabindex属性判断是否为Type B; - 分别提取对应属性值。
- 对每个行元素,先获取
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 主容器XPath main_container_xpath = '//*[@id="main"]/div[3]/div/div[2]/div[3]' # 等待主容器加载完成 main_container = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.XPATH, main_container_xpath)) ) # 获取主容器下所有行元素(根据DOM结构调整,这里假设行是直接子div) rows = main_container.find_elements(By.XPATH, './div') for row in rows: # 先判断是否为Type A:class包含"message-in focusable-list-item" class_attr = row.get_attribute('class') if class_attr and "message-in focusable-list-item" in class_attr: print(f"Type A - Class: {class_attr}") # 可在这里添加保存数据的逻辑 else: # 判断是否为Type B:tabindex等于"-1" tabindex_attr = row.get_attribute('tabindex') if tabindex_attr == "-1": print(f"Type B - Tabindex: {tabindex_attr}") # 可在这里添加保存数据的逻辑
关键说明
- 避免硬编码行索引(比如你之前的
div[8]),改用遍历所有行的方式处理随机顺序; - 判断属性时需考虑
get_attribute可能返回None的情况(比如元素无该属性),所以先做非空判断; - 如果行元素不是主容器的直接子
div,可以调整rows的XPath(比如./div/div/div,根据实际DOM结构修改)。
内容的提问来源于stack exchange,提问作者Sam Don't Know Coding
相关产品推荐
相关产品推荐

