TypeError:无法在'Document'上执行'evaluate':结果不是节点集,因此无法通过Selenium使用Xpath进行转换

时间:2019-03-13 01:48:15

标签: python selenium selenium-webdriver xpath xpath-1.0

部分页面来源:

<span style="display:block; overflow:hidden; white-space: nowrap">Gi2/0/20</span>

部分代码:

from selenium import webdriver
...
driver = webdriver.Chrome()
...
IP_CLICK = browser.find_element_by_xpath('//span[@style="display:block; overflow:hidden; white-space: nowrap"]/text()="Gi2/0/20"').click()

我正在尝试使用xpath表达式选择网页中的一个元素,但是出现以下错误:

InvalidSelectorException: invalid selector: Unable to locate an element with the xpath expression //span[@style="display:block; overflow:hidden; white-space: nowrap"]/text()="Gi2/0/20" because of the following error:
  

TypeError:无法对'Document'执行'evaluate':结果不是节点集,因此无法转换为所需的类型。   (会议信息:chrome = 72.0.3626.121)   (驱动程序信息:chromedriver = 73.0.3683.20(8e2b610813e167eee3619ac4ce6e42e3ec622017),platform = Windows NT 6.1.7601 SP1 x86_64)

3 个答案:

答案 0 :(得分:0)

您的xpath应该是:

//span[@style="display:block; overflow:hidden; white-space: nowrap" and text()="Gi2/0/20"]

它将寻找与span@style值匹配的text()元素。

答案 1 :(得分:0)

此错误消息...

TypeError: Failed to execute 'evaluate' on 'Document': The result is not a node set, and therefore cannot be converted to the desired type. 
 (Session info: chrome=72.0.3626.121) (Driver info: chromedriver=73.0.3683.20 (8e2b610813e167eee3619ac4ce6e42e3ec622017),platform=Windows NT 6.1.7601 SP1 x86_64)

...表示执行 xpath 表达式的结果不是节点集。

从语法上讲,您使用的 xpath 表达式是 legit xpath 表达式,该表达式使用text()节点,如 parent_element/text()="Gi2/0/20" ,紧接着xpath v3.0

不幸的是, Selenium 实现了xpath v1.0,它不支持text()节点。

此外,click()不返回任何内容,因此不需要IP_CLICK

解决方案

对于元素上的click(),可以使用以下解决方案之一:

  • Xpath 1

    browser.find_element_by_xpath("//span[text()='Gi2/0/20']").click()
    
  • Xpath 2

    browser.find_element_by_xpath("//span[contains(., 'Gi2/0/20')]").click()
    

答案 2 :(得分:0)

无效选择器:由于以下错误,无法定位具有 XPath 表达式 6000039318 的元素: 类型错误:无法在“文档”上执行“评估”:结果不是节点集,因此无法转换为所需类型。 回答: 当我使用 selenium 中的 sendKey() 方法将无效数据传递给元素时,我发现了这个错误。就像我使用 sendKey 方法传递元素的 XPath 代替 value(int, String) 一样。由于在属性文件中使用相同的数据属性名称和 Xpath,造成了这种混淆。