2016-02-11 32 views
1

我有一些HTML看起來像這樣一個所有文字:過程從UL標籤內嵌套的div使用硒在python

<div class="class1"> 
    <div class="some multiple classes here"> 
     <div class="some multiple classes here"> 
      <ul class="other classes"> 
       <li> 
        <div class="random">some text1</div> 
        <div class="random1">some text2</div> 
        <div class="random2">some text3</div> 
       </li> 
       <li> 
        <div class="random">some text4</div> 
        <div class="random1">some text5</div> 
        <div class="random2">some text6</div> 
       </li> 
       <li> 
        <div class="random">some text7</div> 
        <div class="random1">some text8</div> 
        <div class="random2">some text9</div> 
       </li> 
       <!-- here can appear more <li></li> elements --> 
      </ul> 
     </div> 
    </div> 
</div> 

的情況有點複雜:

  • 第一,有隻有幾個<li></li>標籤具有相同的<div>類內但不同的文本。隨着時間的流逝,更多地出現<li></li>(與div相同)。

我在努力尋找檢索所有some textX元素使用xpathselenium一個循環(沒有必要,如果是不可能的)的解決方案,但我找不到了。更多的是,當我完成所有<li></li>標籤時,我只想等待其他人出現並採取一些行動。

僞代碼將是如下:

for mydriver.find_element_by_xpath('xpath of ul'): 
    # here get all the texts 
    # process them 

回答

0

您可以使用<li>標籤

divs = [] # will hold the divs 
ul = driver.find_element_by_class_name('classes') 
lis = ul.find_elements_by_tag_name('li') # list of the <li> tags 
for li in lis: 
    divs.append(li.find_elements_by_tag_name('div')) # add all the <div> tags to divs list 

for div in divs: 
    text = div.text 

另一種解決方案將是發現使用<ul>所有<li>標籤和所有<div>標籤使用包含在「隨機」類

divs = driver.find_elements_by_css_selector('[class*="random"]') 

for div in divs: 
    text = div.text 
+0

對於第一個例子中,我得到一個錯誤:'AttributeError的: 'NoneType' 對象有沒有屬性「text'' –

+0

@Alexander應該是'LIS = UL .find_elements_by_tag_name('li')',我更新了我的答案 – Guy

+0

好吧,我知道這一點,我之前修改了它,但仍然得到相同的錯誤。任何想法爲什麼? –

0

你需要所有的鋰標籤直接子的div?

divs = driver.find_elements_by_xpath('//li/div') 

或者通過CSS選擇

divs = driver.find_elements_by_css_selector('li > div')