python - 使用 Selenium 和 Python 从 svg 标签中的 g 标签获取文本
问题描述
我正在尝试使用 selenium 从类标签中获取文本,但我有点走到了死胡同。所有类名都是相同的“legend-row”,但我只需要第三个,即具有“1.09TB”文本的那个。
我试图通过 xpath 找到元素,但没有运气,我设法从这些类中获取值的唯一方法是使用下面的代码行
driver.find_element_by_class_name("legend-row").text
这让我得到了所有的文本,134.46Tb、8.96TB、1.09TB 和 90% 的阈值。有什么办法只能查询第三个吗?请参阅以下 URL 中的类
<g class="legend" style="font-size: 14px;">
<g class="legend-row" transform="translate(102,-32.400000000000006)">
<rect y="-30.599999999999998" width="14" height="14" style="fill: rgb(125, 123, 140); stroke: rgb(125, 123, 140);"/>
<text x="18" y="-18">Allocated:</text>
<text x="109.421875" y="-18"> 134.46 TB</text>
</g>
<g class="legend-row" transform="translate(102,-10.800000000000004)">
<rect y="-30.599999999999998" width="14" height="14" style="fill: rgb(110, 37, 133); stroke: rgb(110, 37, 133);"/>
<text x="18" y="-18">Spare:</text>
<text x="109.421875" y="-18"> 8.96 TB</text>
</g>
<g class="legend-row" transform="translate(102,10.799999999999997)">
<rect y="-30.599999999999998" width="14" height="14" style="fill: rgb(130, 224, 170); stroke: rgb(130, 224, 170);"/>
<text x="18" y="-18">Unallocated:</text>
<text x="109.421875" y="-18"> 1.09 TB</text>
</g>
<g class="legend-th-row" transform="translate(102,32.39999999999999)">
<text x="0" y="0" class="chart-status-icon" style="font-size: 14px; fill: rgb(242, 175, 0);"></text>
<text x="18" y="0">Threshold Level: 90%</text>
</g>
</g>
谢谢您的帮助,
解决方案
要打印文本 1.09 TB,您必须诱导WebDriverWait并且visibility_of_element_located()
您可以使用以下任一Locator Strategies:
使用
XPATH
和文本属性:print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//dui-donut-chart/*[name()='svg']/*[name()='g']/*[name()='g']//*[name()='g']//text[., 'Unallocated:']//following::text[1]"))).text)
使用
CSS_SELECTOR
和get_attribute()
:print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "dui-donut-chart>svg>g>g g:nth-of-type(3) text:nth-of-type(2)"))).get_attribute("innerHTML"))
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
参考
您可以在以下位置找到一些相关的讨论:
推荐阅读
- python - Python pandas 将绝对值添加到系列中的正数/负数
- android - 如果应用程序在 android oreo 及更早版本中被杀死,则显式广播接收器不会启动
- xcode - 如何构建和链接 Skia 库以实现统一
- oracle - 可以使用 SQL Developer 连接,但无法使用 SQL*PLUS 连接(ORA-01034:ORACLE 不可用 ORA-27101:共享内存领域不存在)
- html - 数据未绑定到模态
- apache - httpd 进程总是 256
- sql - SqlCommandBuilder 更新命令正在生成命令但不从 DataGridView 更新数据库
- java - 为什么更快重试会提高我的成功率
- ruby - 如何在请求日志中输出 Hanami::Action::Rack#request_id
- python - 减少轴上的编号和刻度之间的距离