2015-04-16 2 views
1

Я пишу простую программу обхода для обхода «http://fortune.com/fortune500/» и хочу получить значение <option value = "...">...</option>, но при использовании webelement.text для получения контента с именем тега («опция»)), ничего не отображается. Интересно, почему? И кто может решить эту проблему для меня?Сканирование веб-сайта с использованием selenium в firefox с python

# -*- coding: utf-8 -*- 

import mechanize 
from bs4 import BeautifulSoup 
import re 
from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.support.ui import Select 
from selenium.common.exceptions import NoSuchElementException 
from selenium.common.exceptions import NoAlertPresentException 
import unittest, time, re 


#-----------selenium part(ignored)----------------# 

browser = webdriver.Chrome() # Get local session of firefox 
browser.get("http://fortune.com/fortune500/") 

time.sleep(1) # Let the page load, will be added to the API 

industry_button = browser.find_element_by_name('filters[Industry]') 

print industry_button 

count = 0; 
industry_value = industry_button.find_elements_by_tag_name('option') 

for number in industry_value: 
    count += 1 
    print number 
print count 

ответ

0

Селен позволяет легко справиться с select->option HTML конструкций - есть Select class, что обеспечивает интерфейс простой в использовании. Например, .options перечислит все доступные опции. Для каждого варианта вы можете получить .text, чтобы получить внутренний HTML или .get_attribute('value'), чтобы получить значение атрибута value.

Кроме того, вместо time.sleep() явным образом ожидаю появления кнопки переключения.

from selenium.webdriver.support.wait import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import Select 


browser = webdriver.Chrome() 
browser.get("http://fortune.com/fortune500/") 

# toggle 
toggle = WebDriverWait(browser, 10).until(EC.visibility_of_element_located((By.CLASS_NAME, "filter-toggle"))) 
toggle.click() 

# get all options 
industry_button = Select(browser.find_element_by_name("filters[Industry]")) 
for option in industry_button.options: 
    print option.text 

Печать:

Industry: Any 
Advertising, marketing 
Aerospace and Defense 
Airlines 
Apparel 
Automotive Retailing, Services 
Beverages 
... 
+0

Thnaks много! Это действительно помогает мне понять концепцию wait и select(); это действительно помогает мне! –

0

.text возвращает innerHTML этого элемента, а не значение. вы хотите получить атрибут value.

Вероятно, что-то около:

element.get_attribute('value') 
+0

Это работает! Спасибо! –

Смежные вопросы