如何 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')
我正在编写一个 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')