如何使用Python中的Selenium选择下拉菜单值?

332 投票
18 回答
620068 浏览
提问于 2025-04-17 04:51

我需要从一个下拉菜单中选择一个元素。

比如说:

<select id="fruits01" class="select" name="fruits">
  <option value="0">Choose your fruits:</option>
  <option value="1">Banana</option>
  <option value="2">Mango</option>
</select>

1) 首先我得点击它。我是这样做的:

inputElementFruits = driver.find_element_by_xpath("//select[id='fruits']").click()

2) 然后我需要选择正确的元素,比如说Mango(芒果)。

我试着用inputElementFruits.send_keys(...)来实现,但没有成功。

18 个回答

51

希望这段代码能对你有所帮助。

from selenium.webdriver.support.ui import Select

通过ID选择下拉元素

ddelement= Select(driver.find_element_by_id('id_of_element'))

通过XPath选择下拉元素

ddelement= Select(driver.find_element_by_xpath('xpath_of_element'))

通过CSS选择器选择下拉元素

ddelement= Select(driver.find_element_by_css_selector('css_selector_of_element'))

从下拉菜单中选择“香蕉”

  1. 使用下拉菜单的索引

ddelement.select_by_index(1)

  1. 使用下拉菜单的值

ddelement.select_by_value('1')

  1. 你可以匹配下拉菜单中显示的文本。

ddelement.select_by_visible_text('Banana')

566

Selenium 提供了一个方便的 Select,可以用来处理 select -> option 这种结构:

from selenium import webdriver
from selenium.webdriver.support.ui import Select

driver = webdriver.Firefox()
driver.get('url')

select = Select(driver.find_element_by_id('fruits01'))

# select by visible text
select.select_by_visible_text('Banana')

# select by value 
select.select_by_value('1')

另外,您还可以查看:

179

除非你的点击操作会触发某种ajax请求来填充列表,否则其实不需要真的去执行这个点击。

你只需要找到那个元素,然后列出所有选项,选择你想要的选项就可以了。

下面是一个例子:

from selenium import webdriver
b = webdriver.Firefox()
b.find_element_by_xpath("//select[@name='element_name']/option[text()='option_text']").click()

你可以在这里了解更多信息:
https://sqa.stackexchange.com/questions/1355/unable-to-select-an-option-using-seleniums-python-webdriver

撰写回答