我写了一个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"
答案 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")