Python 使用XPATH访问子级
我在Selenium(Python)中试图用XPath查找元素时遇到问题。我想做两个动作:首先,访问父元素的子元素(它是一个子元素),然后访问下一个同级标记以执行相同的操作Python 使用XPATH访问子级,python,selenium,xpath,Python,Selenium,Xpath,我在Selenium(Python)中试图用XPath查找元素时遇到问题。我想做两个动作:首先,访问父元素的子元素(它是一个子元素),然后访问下一个同级标记以执行相同的操作 <div class="A"> <div class="non-desired"></div> //First Access to B <div class="B"> //In order to treat C <div class="C"
<div class="A">
<div class="non-desired"></div>
//First Access to B
<div class="B">
//In order to treat C
<div class="C"></div>
</div>
// And then doing the same for all next B elements
<div class="B"></div>
...
<div class="B"></div>
</div>
要访问B,可以使用以下xpath:
driver.find_element_by_xpath('/html/body/div/div[2]')
这将为您提供B的第二个元素。如果您想要下一个元素,只需更改索引:
/html/body/div/div[3]
要访问B的子级,请向xpath中再添加一个div:
driver.find_element_by_xpath('/html/body/div/div[2]/div')
以及访问您使用的任何元素的父元素:
driver.find_element_by_xpath('/html/body/div/div[2]/div')._parent
希望这有帮助。您可以通过
allClassB = driver.find_elements_by_xpath("//div[@class='A']/div[@class='B']")
现在您有了一个B类所有元素的列表,您可以使用for
循环遍历每个元素
如果目的是查找C类的所有元素,则只需执行以下操作:
allClassC = driver.find_elements_by_xpath("//div[@class='A']/div[@class='B']/div[@class='C']")
B是A的孩子,不是兄弟姐妹。是的,但它也是关于兄弟姐妹的,是孩子的下一个标记谢谢你的回答,所以我已经“捕获”了变量中C类的所有元素,所以如果我想单击每个C元素,我就必须这样做<代码>虽然iIt取决于具体情况,但您可以尝试查看它是否有效。但并非所有情况下都能奏效。有时,在第一次单击后更新页面时,第二次单击可能引发异常。在异常
StaleElementReferenceException
的情况下,您将需要再次(在for循环中)重新找到元素。我正在以正确的方式实现我想要的。但我有个问题。在我的循环和xpath中,如果我写div[j](声明j并递增),j值将不会被他的值替换,Python将保留变量名而不是替换它。通常,如果我们列出[j],它将替换j,但XPATH表达式不是这样。我已经厌倦了div['j'],但j每次都保持相同的值。当我手动执行时,它工作正常,但XPATH中的j值不是动态的。我的需求更具体,我不会给出每个细节,只是通过一个示例总结,答案对我有帮助。我使用你的答案,感谢你的帮助。索引中非动态j的问题在于,我必须键入“+str(j)+”(并且没有“I”或“I”或%),它工作得非常好。非常感谢。
allClassC = driver.find_elements_by_xpath("//div[@class='A']/div[@class='B']/div[@class='C']")