如何选择具有ID的SVG?

时间:2019-05-01 05:38:05

标签: selenium svg xpath

我有一个这样的SVG,它不在iFrame中:

<svg id="abc123" viewBox="0 0 50 50" width="100%" height="100%">
    <path d="blah..."></path>
</svg>

我尝试使用此xpath选择它,但是它不起作用。

//*[name()='svg' and @id='abc123']

如何在xpath 1和最新版本中选择具有多个属性的xpath?

1 个答案:

答案 0 :(得分:2)

我认为应该是这样:

driver.find_element_by_xpath("//*[contains(local-name(), 'svg') and contains(@id, 'abc123')]")

编辑

一个简单的driver.find_element_by_id("abc123")应该找到该元素,而不管该节点是svgdiv还是其他任何东西。

也许这是时间问题,即在页面上出现元素之前会触发find_element。您可以尝试将expected_conditionspresence of element located一起使用,甚至更好-visibility

https://seleniumhq.github.io/selenium/docs/api/py/webdriver_support/selenium.webdriver.support.expected_conditions.html

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


wait = WebDriverWait(driver, 20)
wait.until(EC.presence_of_element_located((By.ID, "abc123")))
driver.find_element_by_id("abc123")