2015-10-15 50 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

相關問題