如何用selenium获取非固定位置的元素,元素在表格中的位置可能会发生变化,对应的元素地址xpath也会发生变化,如果用By.XPATH引用固定地址寻找元素后,若元素在表格中的位置发生变化时就找不到目标元素了,见下图。
问:以上情况怎么办?
selenium获取非固定位置的元素
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
20条回答 默认 最新
- Kwan的解忧杂货铺@新空间代码工作室 2024-02-23 14:21关注
qq_46151004 下午好🌅🌅🌅
本答案参考通义千问要使用Selenium获取非固定位置的表格中动态变化的元素,可以采用以下方法:
-
使用
CSS_SELECTOR
或XPATH
结合动态属性选择器(如.//table[contains(@class,'MOD') and tr[td[@class='MODComp' and .='分析-V1']]
)来定位具有特定类名且包含指定文本的<tr>
元素,而不是硬编码固定的XPath路径。这是因为动态属性(如contains()
)可以根据实际页面内容的变化而动态匹配。CSS_SELECTOR 示例:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 获取动态文本“分析-V1”的父元素(<tr>) dynamic_tr_element = WebDriverWait(driver, timeout).until( EC.presence_of_element_located((By.CSS_SELECTOR, ".MOD table tr:contains('分析-V1')")) )
XPATH 示例:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 获取动态文本“分析-V1”的父元素(<tr>) dynamic_tr_element = WebDriverWait(driver, timeout).until( EC.presence_of_element_located((By.XPATH, "//table[contains(@class,'MOD')]//tr[td[contains(text(),'分析-V1')]]")) )
-
一旦找到具有特定“分析-V1”文本的
<tr>
元素,可以通过find_elements_by_tag_name('td')
或find_elements_by_xpath('//td')
进一步查找其子元素,例如<td>
,以获得具体的目标元素。这样即使表格结构发生变化,只要对应的数据单元格结构保持不变,依然可以准确地找到元素。从找到的
<tr>
元素中选取第一个<td>
元素示例(假设目标元素位于第一个数据列中):first_data_cell = dynamic_tr_element.find_elements_by_tag_name("td")[0]
或者使用XPath 选取:
first_data_cell_xpath = "//table[contains(@class,'MOD')]//tr[td[contains(text(),'分析-V1')]]/td[1]" first_data_cell = driver.find_element_by_xpath(first_data_cell_xpath)
通过这种方法,您可以确保在表格结构发生变化的情况下,Selenium仍然能够定位到动态变化的元素。记得根据实际情况调整CSS_SELECTOR或XPATH表达式以及索引位置。
解决 1无用 -
悬赏问题
- ¥15 verilog 非阻塞赋值下的移位拼接错误
- ¥100 两个按钮控制一个LED
- ¥15 用C语言写离散数学相关问题
- ¥30 如何用python的GephiStreamer连接到gephi中,把Python和Gephi的具体操作过程都展示,重点回答Gephi软件的调试,以及如果代码的端口在浏览器中无法显示怎么处理
- ¥15 ansys机翼建模肋参数
- ¥15 Sumo软件无法运行
- ¥15 如何在vscode里搭建stata的编辑环境?
- ¥15 dify知识库创建问题
- ¥15 如何用C#的chart画1000万个点不卡顿
- ¥15 爬虫技术找到网上看过房源客户的电话