【问题标题】:How to select a value from DropDown list using Selenium and Python如何使用 Selenium 和 Python 从下拉列表中选择一个值
【发布时间】:2026-02-16 04:40:01
【问题描述】:

我有以下下拉列表,我想从中选择值“上一年”:

(我已经手动选择了值)

问题是双重的,我很难用我的代码“找到”或找到这个下拉列表,并且“id”中的数字会逐页更改,所以我无法找到它通过它的“id”。我正在尝试使用以下 Python 3 代码:

select = driver.find_elements_by_xpath('//*[contains(@id, "dropdown-intervaltype")]')
select.click()
# then click the "Previous Year" text

我也试过了:

select = Select(driver.find_elements_by_xpath('//*[contains(@id, "dropdown-intervaltype")]'))
select.select_by_value("Previous Year")

现在这个站点是一个私人工作站点,所以我不能授予访问权限,但我希望有人能指出我还能尝试找到这个元素并选择正确的下拉值?我试过用“css”和“xpath”来定位这个字段,没有运气。

xpath = //*[@id="dropdown-intervaltype31442"]
css_selector = #dropdown-intervaltype31442
full_xpath = /html/body/div[4]/div[2]/div/div[3]/div[3]/div/div[2]/div/form/table/tbody/tr/td[2]/div/div[1]/select

任何要测试的想法都会有所帮助。谢谢!

【问题讨论】:

    标签: python-3.x selenium xpath drop-down-menu css-selectors


    【解决方案1】:

    <select> 元素是一个动态元素。因此,要使用Selenium 选择带有文本为Previous Year<option>,您需要为element_to_be_clickable() 诱导WebDriverWait,您可以使用以下任一Locator Strategies

    • 使用CSS_SELECTOR

      select = Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "select[id^='dropdown-intervaltype'][name^='deviceServicesModel']"))))
      select.select_by_visible_text('Previous Year')
      
    • 使用XPATH

      select = Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//select[starts-with(@id, 'dropdown-intervaltype')][starts-with(@name,'deviceServicesModel')]"))))
      select.select_by_visible_text('Previous Year')
      
    • 注意:您必须添加以下导入:

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

    参考

    您可以在以下位置找到一些相关讨论:

    【讨论】:

    • 完美!使用 CSS 选择器方法并工作。谢谢!
    • @MattWilson xpath 中有一个小错误,我现在已经更正,应该也能正常工作:)
    【解决方案2】:

    你可以使用 XPath:

    new Select (driver.findElement(By.xpath("//select[starts-with(@id, 'dropdown-intervaltype')][starts-with(@name,'deviceServicesModel')]"))) .selectByVisibleText("上一年");

    你也可以使用id:

    new Select(driver.findElement(By.id("dropdownintervaltype"))).selectByVisibleText("Argentina");

    您检查您的 xpath 并选择正确的 xpath。我希望这个答案对你有用。

    【讨论】:

      最近更新 更多