15

次のHTMLコードがあります

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

Selenium を使用してオプション値 (テキストではなく 459、100 など) のリストを取得しようとしています。

現時点では、次の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

ご覧のとおり、コードは純粋な HTML を返します。これを HTMLParser ライブラリで解析しています。Selenium を使用してオプション値を取得する方法はありますか? つまり、Selenium からの結果を解析する必要はありませんか?

4

4 に答える 4

31

確認してください。選択モジュールが何をするかを知る前に私が行った方法は次のとおりです

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

このような出力

-1
459
100
300
于 2013-08-29T16:20:20.690 に答える
12
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'))  

版画

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

私はここでこれを学びました。ドキュメントも参照してください。

于 2013-08-29T16:17:20.543 に答える