Javascript 在selenium中选择SVG标记中的g

Javascript 在selenium中选择SVG标记中的g,javascript,selenium,svg,d3.js,Javascript,Selenium,Svg,D3.js,我刚刚开始从事selenium的工作,在某些方面遇到了困难,需要专家的帮助 这是我的html <div id='d3_tree'> <svg> <g transform="translate(20,50)> <g class='node'> </g> <g class='node pe_node'> </g> <

我刚刚开始从事selenium的工作,在某些方面遇到了困难,需要专家的帮助

这是我的html

<div id='d3_tree'>
   <svg>
     <g transform="translate(20,50)>
        <g class='node'>
        </g> 
        <g class='node pe_node'>
        </g>
        <g class='node pe_node'>
        </g> 
     </g>
   </svg>
</div>
然后我读到svg不能直接选择,所以我尝试了这个

nodes = self.driver.find_elements(By.XPATH, "//div[@id='d3_tree']/*[name()='svg']/g")

但它仍然不适用于我,我得到的结果是
[]

有谁能指导我如何选择svg中带有类pe_节点的

任何帮助都将不胜感激


谢谢下面的xpath应该可以工作
//div[@id='d3_tree']//g[contains(@class,'pe_node')]
您不能使用
标记名选择
元素吗

node = driver.findElement(By.tagName("svg"))
otherNodes = node.findElements(By.Xpath("./g[contains(@class, 'pe_node')]")

您可以尝试一下,我不知道您使用的是哪种语言。但是下面的selenium可能会对您有所帮助。Nodes将返回svg标记下的所有元素,并将类作为“node pe_node”


你已经走到一半了,以下几点应该行得通:

nodes = self.driver.find_elements(By.XPATH, "//div[@id='d3_tree']/*[name()='svg']/*[name()='g']")
“svg”中的每个元素都必须被引用为“/*[name()=”]

在这种情况下,您可以使用以下方法将其缩短一点:

nodes = self.driver.find_elements(By.XPATH, "//div[@id='d3_tree']/*/*[name()='g']")

你可以这样写:

//div[@id='d3_tree']/*[name()='svg']/*[name()='g' and @class='node pe_node']/*[name()='g'][2]

谢谢@cherya,我已经试过了,但它仍然返回[]方括号:(你可以尝试使用css选择器。如果这个类是唯一的,它将是这样的:nodes=self.driver.find_元素(By.cssSelector(“.node pe_node”));我正在使用python语言,我得到一个错误,AttributeError:type对象“By”没有属性“cssSelectorTry”驱动程序。通过css选择器(“node pe_node”)查找元素,但我不确定这一点:)谢谢@omkar我正在使用python语言。我已经尝试了你的代码,但它仍然不起作用:(我能够获取node。但是nodes仍然[]不确定如何用python编写代码,但是nodes=node.findElements(By.Xpath(//g[@class='node pe_node'])应该适合你。如果没有,可能还有其他问题谢谢@Mark,但是第二行代码对我不起作用:(很抱歉,我以前没有看到您使用python绑定。请尝试
node=driver.find\u element\u by\u tag\u name(“svg”)
nodes=node.find\u element\u by\u xpath(“./g[contains(@class,'pe\u node')”)
希望这会给您一个
pe\u节点列表
这只为我选择了第一个
g
)。
nodes = self.driver.find_elements(By.XPATH, "//div[@id='d3_tree']/*[name()='svg']/*[name()='g']")
nodes = self.driver.find_elements(By.XPATH, "//div[@id='d3_tree']/*/*[name()='g']")
//div[@id='d3_tree']/*[name()='svg']/*[name()='g' and @class='node pe_node']/*[name()='g'][2]