2017-10-06 119 views
0

我正在試圖在這種結構的網絡中進行刮取。正確選擇一個web元素通過python和selenium的xpath

<div> 
    <div class = 「class1」 > 
    <div class = 「class2」 > 
    <div class = 「class3」 > 
    <div style = 「clear: both; 」 > 
</div> 
<div> 
    <div class = 「class1」 > 
    <div class = 「class2」 > 
    <div class = 「class3」 > 
    <div style = 「clear: both; 」 > 
</div>  
<div> 
    <div class = 「class1」 > 
    <div class = 「class2」 > 
    <div class = 「class3」 > 
    <div style = 「clear: both; 」 > 
</div> 
在每個部分

有diferent信息。我想搜索class1中的一個特定單詞,如果這個單詞存在那麼我打印這些信息。此後我有問題。在我想獲得本節3級的信息之後。例如,如果我的第一部分的class1有「這個詞」,那麼我想在本節中獲得class3的信息。

我的代碼是這樣的:

cs1 = driver.find_elements_by_class_name("class1") 
for i in cs1: 
    information = i.text 
    if "this word" in information: 
     print(information) 
     infclass3 = i.find_element_by_xpath('//following-sibling::div[@class = "class3"]') 
     print(infclass3.text) 

問題是這樣的:我與「這個詞」 Class1的信息,但關於這一部分,我將不CLASS3的信息。每次總是在第一部分打印class3。例如,如果「這個詞」是在第二和第三部分我得到的是這樣的:

information of class1 - Section 2 
information of class3 - Section 1 
information of class1 - Section 3 
information of class3 - Section 1 

然後在該行的信息1和3是正確的。但在第2行和第4行不是,1.因爲是重複2.因爲在第1行中不是「這個單詞」

感謝您的幫助。

我希望你有一個愉快的一天:)

+0

爲什麼循環,並沒有得到元素(一個或多個)需要直接:'driver.find_element(S)_by_xpath('// DIV [@類= 「1類」 和包含(文本() ,「this word」)] /../ div [@ class =「class3」]')' –

+0

我不知道我在做什麼錯,但是當我運行你的代碼時 我什麼也沒有得到 – Alejo

+0

也許你需要發佈更多你的HTML(至少如何用「這個詞」部分看起來像) –

回答

0

謝謝大家的幫助

最後,我以這種方式得到它:

infclass3 = i.find_element_by_xpath('following-sibling::*[2]') 

我得到Class1的元素,後來與'following-sibling::*[2]'我找到兄弟姐妹,並選擇一個位於對應於CLA​​SS3 2的位置。

感謝您的關注

0

與您的代碼的問題是,你正在試圖獲得來自class1元素的背景下class3元素,這意味着它只會尋找的孩子在class1元素目前在腦海分配給i ...這個對於你想要的class3元素的選擇是:

infclass3 = i.find_element_by_xpath('../div[@class="class3"]') 
+0

謝謝你。你對自己的觀察是正確的,但我嘗試了你的解決方案,但它沒有奏效。我用'follow-sibling :: * [2]'得到了它 – Alejo

相關問題