2013-08-29 16 views
7

Ich habe den folgenden HTML-CodeEintrag wählen Sie die Option Wert mit Selen und 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> 

Ich versuche, eine Liste der Optionswerte (wie 459, 100, usw., nicht der Text) unter Verwendung von Selen.

Im Moment habe ich den folgenden Python-Code

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 

haben, wie Sie den Code zurückgibt reine HTML sehen kann, was ich mit HTMLParser Bibliothek bin Parsen. Gibt es eine Möglichkeit, die Optionswerte nur mit Selenium zu erhalten? Mit anderen Worten, ohne das Ergebnis von Selen analysieren zu müssen?

Antwort

14

, check it out, hier ist, wie ich es tat, bevor ich was

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 

Ausgänge wie diese

-1 
459 
100 
300 
+1

Der Code funktioniert, vielen Dank! Es ist eine sehr einfache Art, in der Tat zu arbeiten. –

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')) 

druckt

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

lernte ich diesen here. Siehe auch the docs.

+0

Und es funktioniert! :) Ja, ich werde die Dokumente ein wenig mehr lesen, ich konnte die Auswahl nicht richtig funktionieren, wenn ich es versucht habe. Vielen Dank! –

2

Einfachere Version hat das Select Module wusste:

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