如何 select python selenium 中的下拉菜单中的值

How to select a value from drop down menu in python selenium

我正在编写一个 python 脚本,该脚本将调用一个网页,并将 select 从下拉列表中选择一个选项来下载该文件。为了完成这项任务,我使用 chropath。它是一个浏览器扩展,可以为您提供网页上任何按钮或字段的相对 xpath 或 id,我们可以使用它从 python selenium 脚本中调用它。

上图显示了下拉菜单,我必须在其中 select 2019 作为年份并下载文件。在图像的下部,您可以看到我使用 chropath 来获取下拉菜单的相对 xpath,即 //select[@id='rain']

下面是我使用的代码:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
driver.get("<URL>")

driver.maximize_window()

grbf = driver.find_element_by_xpath("//select[@id='rain']") 
grbf.send_keys('2019')

grbf_btn = (By.XPATH, "//form[1]//input[1]")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable(grbf_btn)).click()

从上面的代码中,您可以看到我正在使用 xpath 来 select 下拉列表 grbf = driver.find_element_by_xpath("//select[@id='rain']") ,然后将密钥作为 2019 发送,即 grbf.send_keys('2019') 之后我正在调用下载按钮来下载它。但出于某种原因,它总是 selecting 年份 1999 从下拉列表中。我不明白这有什么问题。这是解决这个问题的正确方法吗?请帮忙。谢谢

我前段时间遇到了同样的问题。试试这个:

from selenium.webdriver.support.ui import Select

grbf = Select(driver.find_element_by_xpath("//select[@id='rain']"))
grbf.select_by_value('2019')

在 select_by_value() 中,您必须使用下拉列表中元素的值。

顺便说一句,如果一个元素有id,就使用它。

grbf = Select(driver.find_element_by_id('rain'))

在我看来,我认为这不是正确的方法。您尝试 select 下拉选项(不是像 的文本框),因此发送键盘命令不起作用。

您需要做的是尝试检查 HTML 在单击下拉菜单时发生的变化,并尝试使用 XPath 查找您想要 select.

的选项

如果您仍然卡在这个问题上,我建议您使用 katalon 记录器,它是一个 chrome 扩展,可以让您记录并进行 UI 测试

试试下面的代码:

select = Select(driver.find_element_by_xpath("//select[@id='rain']"))
select.select_by_visible_text('2019')

另一种处理下拉菜单的方法:

使用下拉索引:

select.select_by_index(Paass index)

使用下拉列表的值:

select.select_by_value('value of element')

使用下拉菜单的可见文本:

select.select_by_visible_text('element_text')