为什么这个Selenium/XPath查询只选择第一个`g`标记?
我有一个为什么这个Selenium/XPath查询只选择第一个`g`标记?,selenium,xpath,svg,Selenium,Xpath,Svg,我有一个svg元素,里面有多个g标记。通常,当我按名称选择标记时,我会得到页面上所有标记的列表。例如,这将返回SeleniumWebElement实例的列表: browser.find_elements_by_xpath('//a') 但是当我尝试选择svg元素中的所有g标记时,我只返回第一个元素。例如: browser.find_element_by_xpath('//*[name()="svg"]/*[name()="g"]') 这里是我的标记: <svg xmlns="http:
svg
元素,里面有多个g
标记。通常,当我按名称选择标记时,我会得到页面上所有标记的列表。例如,这将返回SeleniumWebElement
实例的列表:
browser.find_elements_by_xpath('//a')
但是当我尝试选择svg
元素中的所有g
标记时,我只返回第一个元素。例如:
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
标记?这是因为您使用了find\u element\u by\u xpath
返回第一个元素。要返回所有元素,请使用find\u elements\u by\u xpath
:
browser.find_elements_by_xpath('//*[name()="svg"]/*[name()="g"]')
但我会使用更短的CSS选择器:
browser.find_elements_by_css_selector('svg > g')
我会这样做: 使用以下XML:
...
<svg>
<g>1</g>
<g>2</g>
<g>3</g>
</svg>
...
这将返回3个节点,如本网站所示:
注1:如果在svg
标记上引入名称空间,您将在上面的站点上看到此错误:XPath查询的默认(无前缀)名称空间URI始终为“”,并且无法将其重新定义为“http://www.w3.org/2000/svg“。
注2:这里还有一个类似的问题:我不同意CSS定位器较短。如果写得正确,它们的长度通常相同:
//svg/g
@djangofan,如果“//svg/g”起作用,则您的语句是正确的,但事实并非如此。XPath表达式是我尝试的第一个表达式,但它没有返回任何元素。我从中获得了name()=“svg”
代码片段
//svg/g