2013-08-29 4 views
7

Ho il seguente codice HTMLsi elencano i valori di opzione Seleziona con selenio e Python

<select name="countries" class_id="countries"> 
    <option value="-1">--SELECT COUNTRY--</option> 
    <option value="459">New Zealand</option> 
    <option value="100">USA</option> 
    <option value="300">UK</option> 
</select> 

Sto cercando di ottenere un elenco dei valori di opzione (come 459, 100, ecc, non il testo) utilizzando Selenio.

Al momento ho il seguente codice Python

from selenium import webdriver 

def country_values(website_url): 
    browser = webdriver.Firefox() 
    browser.get(website_url) 
    html_code=browser.find_elements_by_xpath("//select[@name='countries']")[0].get_attribute("innerHTML") 
    return html_code 

Come si può vedere il codice restituisce HTML puro, che sto parsing con biblioteca HTMLParser. C'è un modo per ottenere i valori delle opzioni solo usando il selenio? In altre parole, senza dover analizzare il risultato del selenio?

risposta

14

check-out, ecco come ho fatto prima di sapere ciò che il Select Module fatto

from selenium import webdriver 

browser = webdriver.Firefox() 
#code to get you to the page 
select_box = browser.find_element_by_name("countries") # if your select_box has a name.. why use xpath?..... this step could use either xpath or name, but name is sooo much easier. 
options = [x for x in select_box.find_elements_by_tag_name("option")] #this part is cool, because it searches the elements contained inside of select_box and then adds them to the list options if they have the tag name "options" 
for element in options: 
    print element.get_attribute("value") # or append to list or whatever you want here 

uscite come questo

-1 
459 
100 
300 
+1

Il codice funziona, grazie mille! È un modo molto semplice per lavorare davvero. –

7
import selenium.webdriver as webdriver 
import selenium.webdriver.support.ui as UI 
import contextlib 

with contextlib.closing(webdriver.Firefox()) as driver: 
    driver.get(url) 
    select = UI.Select(driver.find_element_by_xpath('//select[@name="countries"]')) 
    for option in select.options: 
     print(option.text, option.get_attribute('value')) 

stampe

(u'--SELECT COUNTRY--', u'-1') 
(u'New Zealand', u'459') 
(u'USA', u'100') 
(u'UK', u'300') 

ho imparato questo here. Vedi anche the docs.

+0

Ed lavori! :) Sì, leggerò i documenti un po 'di più, non ho potuto ottenere la selezione per funzionare correttamente quando ho provato. Grazie! –

2

Più semplice versione:

dropdown_menu = Select(driver.find_element_by_name(<NAME>)) 
for option in dropdown_menu.options: 
     print option.text 
Problemi correlati