2014-04-07 173 views
0

我有多個選擇選項爲:硒選擇選項

<select id="auto_year" class="element" onchange="loadMakes(this.value);" name="auto_year"> 
<option value="0000">- Year -</option> 
<option value="2014">2014</option> 
<option value="2013">2013</option> 
<option value="2012">2012</option> 
<option value="2011">2011</option> 
</select> 

<select id="auto_make" class="element" onchange="loadModels(document.getElementById('auto_year').value, this.value);;" name="auto_year"> 
<option value="0000">- Make-</option> 
</select> 

最初,選擇ID = 「auto_make」 內該選項爲空。但是,當我從選擇其中一個選項時,請選擇id =「auto_year」,此時會出現該選項。我在選擇值時遇到問題。我的代碼是:

from selenium import webdriver 
from bs4 import BeautifulSoup 
import re 

browser = webdriver.Firefox() 
browser.get(certain_url) 
html_source = browser.page_source 

yearoption_val = browser.find_element_by_id('auto_year') 
for yearoption in yearoption_val.find_elements_by_tag_name('option'): 
if yearoption.text == '- Year -': 
    continue 
else: 
    yearoption.click() 
    itemmake_val = browser.find_element_by_id('auto_make') 
    for itemmake in itemmake_val.find_elements_by_tag_name('option'): 
    if (itemmake.text == r'\- Make \(\d+ items\) \-' or '- Model -'): 
    continue 
    else: 
    itemmake.click() 

與代碼的問題是它會選擇2014年遷入2013沒有ID = auto_make尋找選擇在2014年的任何幫助或建議將是真正的幫助。

+0

您是否試過在'yearoption.click()'代碼之後插入一個小睡眠?這將確保onclick方法可以執行。 – Vish

+0

睡覺在自動化腳本中永遠不會明智,應該避免 –

回答

0

你試過實例化一個Select對象嗎?以下是來自Python中Selenium網站的一個例子;

# available since 2.12 
from selenium.webdriver.support.ui import Select 
select = Select(driver.find_element_by_tag_name("select")) 
select.deselect_all() 
select.select_by_visible_text("Edam") 
1

2周前我還在爲同樣的問題苦苦掙扎。我嘗試了許多不同的選項,並以下面的方法結束。問題是click()Select()確實做出了選擇,但未能設置該值。唯一可能會丟失的是將密鑰發送給選定對象。

從selenium.webdriver.common.keys導入密鑰

def select_option_from_a_dropdown(self, select_object, option_value): 
    """ 
    To select options in "<select>" in selenium we need to select the option first and then need 
    to send ENTER key on the select. 
    """ 
    options = select_object.find_elements_by_tag_name("option") 
    for option in options: 
     self.log.info(option.text) 
     if option.text.upper() == option_value.upper(): 
      option.click() 
    select_object.send_keys(Keys.RETURN) 

如果你像我一樣面臨同樣的問題,你只需要yearoption.click()後執行yearoption_val.send_keys(Keys.RETURN)

**英語不是我的第一語言。請酌情編輯答案