我有一个svg
元素,其中包含多个g
标记。通常,当我按名称选择标签时,我会得到页面上所有标签的列表。例如,这将返回Selenium WebElement
实例的列表:
browser.find_elements_by_xpath('//a')
但是当我尝试选择g
元素中的所有svg
标签时,我只返回第一个元素。例如:
browser.find_element_by_xpath('//*[name()="svg"]/*[name()="g"]')
这是我的标记:
<svg xmlns="http://www.w3.org/2000/svg">
<g>...</g>
<g>...</g>
<g>...</g>
...
</svg>
如何选择所有g
代码?
答案 0 :(得分:2)
那是因为你使用find_element_by_xpath
返回第一个元素。要返回所有元素,请使用find_elements_by_xpath
:
browser.find_elements_by_xpath('//*[name()="svg"]/*[name()="g"]')
但我会使用更短的CSS选择器:
browser.find_elements_by_css_selector('svg > g')
答案 1 :(得分:-1)
我将如何做到这一点:
使用以下XML:
...
<svg>
<g>1</g>
<g>2</g>
<g>3</g>
</svg>
...
然后使用此XPath表达式:
//svg/g
这将返回3个节点,如此站点所示:http://www.freeformatter.com/xpath-tester.html
注意1:如果您在svg
标记上引入了命名空间,您会在以上网站上看到此错误:The default (no prefix) Namespace URI for XPath queries is always '' and it cannot be redefined to 'http://www.w3.org/2000/svg'.
注2:此处有另一个类似的问题:XPath Error - The default (no prefix) Namespace URI for XPath queries is always ''