首页 > 解决方案 > 如何点击一个使用 Selenium 和 Python 的元素

问题描述

在下面提供了一个 xpath:

<svg:image xlink:href="some.svg" class="holder-38" width="24" height="268" preserveAspectRatio="none" x="426.7" y="473" type="image/svg+xml" data-ember-action="" data-ember-action-12238="12238">

我可以使用 xpath 访问它(没有标记为'*'):

'//*[@class="holder-38"]'

但无法使用标签访问svg:image

'//svg:image[@class="holder-38"]'

如何在此处指定标签?

标签: pythonseleniumsvgxpathwebdriverwait

解决方案


<svg:image>

<svg:image>元素包括 SVG 文档中的图像。它可以显示光栅图像文件或其他 SVG 文件。SVG 软件必须支持的唯一图像格式是 JPEG、PNG 和其他 SVG 文件。动画 GIF 行为未定义。

显示的 SVG 文件<image>视为未加载外部资源、未应用:visited样式且无法交互的图像。要包含动态 SVG 元素,请尝试使用外部 URL。要包含 SVG 文件并在其中运行脚本,请尝试在.<use><object><foreignObject>

注意:HTML 规范定义<image><img>解析 HTML 的同义词。此特定元素及其行为仅适用于 SVG 文档或内联 SVG


链接:href

xlink:href属性将指向资源的链接定义为引用<IRI>。该链接的确切含义取决于使用它的每个元素的上下文。

自 SVG 2 起已弃用:不再推荐使用此功能。尽管某些浏览器可能仍然支持它,但它可能已经从相关的 Web 标准中删除,可能正在被删除,或者可能仅出于兼容性目的而保留。避免使用它,并尽可能更新现有代码;请参阅本页底部的兼容性表以指导您的决定。请注意,此功能可能随时停止工作。

注意:SVG 2 删除了对xlink命名空间的需求,因此xlink:href您应该使用href.


解决方案

click()在所需的元素上,您需要为所需的元素诱导WebDriverWaitelement_to_be_clickable您可以使用以下解决方案:

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[name()='svg:image' and starts-with(@class, 'holder') and contains(@xlink:href, 'some')]"))).click()

注意:您必须添加以下导入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

推荐阅读