2016-04-06 24 views
1

Мне нужно проанализировать некоторые дочерние элементы во всех родительских элементах на странице.python selenium найти дочерние элементы в цикле

Создать список всех статей на странице

article_elements = driver.find_elements_by_tag_name('article') 

И после перевязки, чтобы получить дочерние элементы в цикл и добавить все результаты в список

for article in article_elements: 
    title = article.find_element_by_xpath('//article/h2').text 
    share_count = article.find_element_by_xpath('//footer/div/a/span').text 
    poinst = article.find_element_by_xpath('//footer/div[2]/div[1]/div[3]').text 
    meta_info_list.append({'title':title, 'share count':share_count, 'points':poinst}) 

После завершения цикла я получил в 40 раз одну такую ​​же статья мета (первой статьи)

{'share count': u'66', 'points': u'53 points', 'title': u'25+ Random Acts Of Genius Vandalism'} 
{'share count': u'66', 'points': u'53 points', 'title': u'25+ Random Acts Of Genius Vandalism'} 
{'share count': u'66', 'points': u'53 points', 'title': u'25+ Random Acts Of Genius Vandalism'} 
{'share count': u'66', 'points': u'53 points', 'title': u'25+ Random Acts Of Genius Vandalism'} 
... 40 times 

Мой весь код

# coding: utf8 
from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
import time 

driver = webdriver.Chrome() 
driver.set_window_size(1024,768) 
driver.get('http://www.boredpanda.com/') 

time.sleep(2) 

meta_info_list = [] 

article_elements = driver.find_elements_by_tag_name('article') 

for article in article_elements: 
    title = article.find_element_by_xpath('//article/h2').text 
    share_count = article.find_element_by_xpath('//footer/div/a/span').text 
    poinst = article.find_element_by_xpath('//footer/div[2]/div[1]/div[3]').text 
    meta_info_list.append({'title':title, 'share count':share_count, 'points':poinst}) 

for list in meta_info_list: 
    print(list) 

ответ

2

Выражение XPath в цикле должно начинаться с точкой быть от конкретных условий:

for article in article_elements: 
    title = article.find_element_by_xpath('.//article/h2').text 
    share_count = article.find_element_by_xpath('.//footer/div/a/span').text 
    poinst = article.find_element_by_xpath('.//footer/div[2]/div[1]/div[3]').text 
    meta_info_list.append({'title':title, 'share count':share_count, 'points':poinst}) 

В качестве примечания, вы можете сократить код, используя список понимание:

meta_info_list = [{ 
    'title': article.find_element_by_xpath('.//article/h2').text, 
    'share count': article.find_element_by_xpath('.//footer/div/a/span').text, 
    'points': article.find_element_by_xpath('.//footer/div[2]/div[1]/div[3]').text 
} for article in article_elements] 
Смежные вопросы