无法将两个xpath表达式合并为一个表达式

时间:2017-08-10 10:49:34

标签: python selenium xpath selenium-webdriver

我写了一个xpath来找到某个元素。然而,问题是我可以在childNodes [10]或childNodes [12]中使用的元素。我想在一个表达式中创建一个将两者结合起来的表达式,它仍然会定位两者,而不管它的位置如何。这两个表达式是:

第一个:

 element = driver.find_element_by_xpath("//td[@class='data']/table//th")
 name = driver.execute_script("return arguments[0].childNodes[10].textContent", element).strip()

第二个:

 element = driver.find_element_by_xpath("//td[@class='data']/table//th")
 name = driver.execute_script("return arguments[0].childNodes[12].textContent", element).strip()

我试过这样但却没有得到任何结果:

 element = driver.find_element_by_xpath("//td[@class='data']/table//th")
 name = driver.execute_script("return arguments[0].childNodes[10].textContent|return arguments[0].childNodes[12].textContent", element).strip()

如何在一个表达式中粘合两者?顺便说一下,我在python + selenium脚本中使用这个xpath。

以下是html的链接: " https://www.dropbox.com/s/vl8anp8te48ktl2/For%20SO.txt?dl=0"

2 个答案:

答案 0 :(得分:1)

如果其中一个文本节点是空字符串,您可以尝试:

element = driver.find_element_by_xpath("//td[@class='data']/table//th")
name = driver.execute_script("return arguments[0].childNodes[10].textContent", element).strip() or driver.execute_script("return arguments[0].childNodes[12].textContent", element).strip()

这应该返回name非空字符串(第一次出现非空文本节点)

答案 1 :(得分:0)

怎么样, 以下将为您提供索引10或12

的输入元素
element = driver.find_element_by_xpath("//td[@class='data']/table//th//*[position()=10 or position()=12]/input")