2014-12-05 73 views
1

我对各种xpath表达式都遇到了这个问题。硒的find_element_by_xpath()方法失败,而相同表达式的lxml给出期望值。例如:selenium的xpath查找元素获取错误,其中lxml中的表达式相同

>>> lxml.html.fromstring(br.page_source).xpath('//a[@title="2"]/text()') 
... ['\n\t\t\t\t\t\t2\n\t\t\t\t\t', '\n\t\t\t\t\t\t2\n\t\t\t\t\t'] 

>>> br.find_element_by_xpath('//a[@title="2"]/text()') 
... InvalidSelectorException: Message: {"errorMessage":"The result of the xpath expression \"//a[@title=\"2\"]/text()\" is: [object Text]. It should be an element.","request":{"headers":{"Accept":"application/json","Accept-Encoding":"identity","Connection":"close","Content-Length":"108","Content-Type":"application/json;charset=UTF-8","Host":"127.0.0.1:47455","User-Agent":"Python-urllib/2.7"},"httpVersion":"1.1","method":"POST","post":"{\"using\": \"xpath\", \"sessionId\": \"85546b60-7c8e-11e4-b2ba-2bb5fbee7719\", \"value\": \"//a[@title=\\\"2\\\"]/text()\"}","url":"/element","urlParsed":{"anchor":"","query":"","file":"element","directory":"/","path":"/element","relative":"/element","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/element","queryKey":{},"chunks":["element"]},"urlOriginal":"/session/85546b60-7c8e-11e4-b2ba-2bb5fbee7719/element"}} 
Screenshot: available via screen 

为什么会发生这种情况,我该如何纠正它?

回答

2

正如错误消息所述 - 在find_element_by_xpath()中使用的xpath必须指向元素。在你的情况下,它指向文本节点

如果你想获得元素的文本,先找到元素,然后拿到.text

element = driver.find_element_by_xpath('//a[@title="2"]') 
print element.text 
0

只需添加一些东西,如果结果不是一个元素,它是在列表中。

content = driver.find_element_by_id("aaa") 
    all_children_by_xpath = content.find_elements_by_xpath("//p") 
    for item in all_children_by_xpath: 
     print item.text 
相关问题