Selenium 选择选项

0 投票
2 回答
952 浏览
提问于 2025-04-18 01:40

我有多个选择框,内容如下:

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

一开始,select id = "auto_make" 这个选择框是空的。但是当我从select 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年的选项。任何帮助或建议都将非常有用。

2 个回答

1

我两周前也遇到了同样的问题。我尝试了很多不同的方法,最后找到了下面这个解决方案。问题在于,虽然click()Select()可以选择,但却没有设置值。你可能忽略了一点,就是需要给选择对象发送一个键。

从selenium.webdriver.common.keys导入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)

**我的英语不是很好,请适当修改这个回答。

1

你有没有试过创建一个选择对象?这里有一个来自Selenium网站的Python示例;

# 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")

撰写回答