Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用XPATH访问子级_Python_Selenium_Xpath - Fatal编程技术网

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"

我在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>
  </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']")