在selenium中选择SVG标签内的图像

时间:2015-07-09 08:31:11

标签: python selenium xpath svg

我刚刚开始在硒中工作并陷入困境并需要帮助。 这是我的HTML。我正在使用python selinium

<div id="d3_tree">
  <svg>
    <g>
      <g class="node vm node_pe">
        <image class="mainNode" xlink:href="images/edge.png"> </image>
        <image xlink:href="images/gate.png"></image>
      </g>
      <g class="node vm node_pe">
        <image class="mainNode" xlink:href="images/edge.png"> </image>
        <image xlink:href="images/gate.png"></image>
      </g>
    </g>
  </svg>
</div>

我想获取所有vm node_pe的图像标记,以便我可以检查哪个节点有图像。

这些是我尝试使用的xpath,其中我是xpath上的循环。

"//div[@id='d3_tree']/*[name()='svg']/*[name()='g']/*[name()='g["+str(i)+"]']/*[name()='image[2]']"

在xpath之上返回NONE

"//div[@id='d3_tree']/*[name()='svg']/*[name()='g']/*[name()='g["+str(i)+"]']"

返回1个元素,但无法获取任何属性。

"//*[contains(@class, 'node vm node_pe')]"

返回所有元素,但get_attribute(&#34; innerHTML&#34;)返回NONE

任何帮助将不胜感激 感谢

1 个答案:

答案 0 :(得分:1)

这个XPATH应该可以工作:

//*[@id="d3_tree"]/svg/g/g/*[contains(@class, 'mainNode')]/@xlink:href

或者你可以这样做:

images = WebDriverWait(driver, 2).until(lambda driver: driver.find_elements_by_css_selector('#d3_tree image.mainNode'))
for image in images:
    print(image.get_attribute('xlink:href'))

检查节点是否有图像,可以检查属性是否为空。

if(image.get_attribute('xlink:href') is None):
    print("attribute is none")