2015-10-15 51 views
1

您好,我有这个xpath代码,我想要链接和数据。Xpath元素在Selenium中不匹配但在浏览器控制台中匹配

<li class="qTile P-14 Bdbx-1g Bgc-w"> 
<div class="Lh-16 "> 
<h3 id="20151012074222AAY5Tdd" class="qstn-title Fz-15 Fw-b Wow-bw"><a data-rapid_p="1" class="Clr-b" data-ylk="slk:qtitle" href="/question/index?qid=20151012074222AAY5Tdd">Google or Yahoo?</a></h3> 
<div class="desc"> 
    Both 
</div> 
<div class="long-desc Mah-130 Ovy-s D-n"> 
    Both 
</div> 
<div class="Fz-12 Clr-888"> 
    75 answers 
    <span class="Fz-14">·</span> 
    <a data-rapid_p="2" class="Clr-b" data-ylk="slk:cat" href="/dir/index/discover?sid=2115500141">Google</a> 
    <span class="Fz-14">·</span> 
    3 days ago 
</div> 

在这张图中只显示数据字段,xpath用于取问题的链接效果很好。 我尝试使用这个xpath并在浏览器中运行良好,但是当我在Python中使用硒时,我有xpath错误。

post_elems = self.driver.find_elements_by_xpath('//li[contains(@class,"qTile P-14 Bdbx-1g Bgc-w")]') 

i = 0 
for post in post_elems: 
    data_of_question = post.find_element_by_xpath('.//div[contains(@class,"Fz-12 Clr-888")]/text()[last()]') 
    url = post.find_element_by_xpath('.//h3/a[contains(@class,"Clr-b")]') 
    url_accodare = url.get_attribute('href') 
+0

请将HTML作为文本而不是图片发布,因为在某些时候图片将不再可用并且问题将不太有用。 – JeffC

回答

2

的问题是,在硒的XPath表达式必须指向一个标签,而不是一个文本节点。换句话说,.//div[contains(@class,"Fz-12 Clr-888")]/text()[last()]表达式是非法的,您必须以不同的方式获取该问题的日期。

举例来说,你可以得到元素的完整文本,并使用正则表达式来提取您感兴趣的部分,例如:

import re 

value = post.find_element_by_xpath('.//div[contains(@class,"Fz-12 Clr-888")]').text 
match = re.search(r"(\d+ days ago)", value) 
print(match.group(1)) 

或者,你也可以抓住元素的outerHTML和通过解析它,例如,BeautifulSoup得到你所需要的文字:

from bs4 import BeautifulSoup 

elm = post.find_element_by_xpath('.//div[contains(@class,"Fz-12 Clr-888")]') 
data = elm.get_attribute("outerHTML") 

soup = BeautifulSoup(data) 
print(soup.find_all(text=True)[-1]) 

也有,当然,其他选项中提取所需的文本节点。

+0

我得到这种类型的错误,如果我使用你的第一个例子:TypeError:预期的字符串或缓冲区 – RedVelvet

+0

确定match.group很好采取该元素?我仍然有这个错误行153,解析 打印(match.group(1)) AttributeError:'NoneType'对象没有属性'组' – RedVelvet

+0

@RedVelvet你可以打电话给' .search()' - 打印什么? (可能是文章中没有X天的帖子 - 这是可以理解的:))。 – alecxe

相关问题