使用Python Selenium选择下拉列表值

2024-09-29 21:37:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在Python中使用Selenium选择一个下拉值,但无法这样做。我从“复制选择器”中得到的代码如下

#mui-12848

完整的HTML是

<input aria-invalid="false" autocomplete="off" type="text" class="MuiInputBase-input MuiOutlinedInput-input MuiAutocomplete-input Reports-autocompleteInput-133 MuiAutocomplete-inputFocused MuiInputBase-inputAdornedEnd MuiOutlinedInput-inputAdornedEnd" aria-autocomplete="list" autocapitalize="none" spellcheck="false" value="Monthly" id="mui-12848" aria-activedescendant="mui-12848-option-1" aria-controls="mui-12848-popup">

我试过了

s1 = Select(browser.find_element_by_id("mui-12848"))
s1.select_by_visible_text('Quarterly')

这会产生以下错误 UnexpectedTagNameException:消息:选择仅适用于元素,不适用于

我也试过了

browser.find_element(By.XPATH("//*[@id='mui-12848'][2]")).click();

这会产生以下错误 TypeError:“str”对象不可调用

感谢您的帮助

以下是截图 The Screenshot of the DropDown Component


Tags: textbrowseridfalseinputelementfindautocomplete
3条回答

语法不正确。 它应该像driver.find_element(By.XPATH, "//*[@id='mui-12848']").click()

此外,不能将索引包含在定位器中。您需要先使用find_elements,然后再使用上面的索引:driver.find_elements(By.XPATH,"//*[@id='mui-12848']")[2].click()

此错误消息

UnexpectedTagNameException: Message: Select only works on elements, not on

…表示您试图使用Select()类,该类仅在<select>元素上工作,其中所需元素是<input>元素

要单击<input>元素,可以使用以下任一Locator Strategies

  • 使用css_selector

    driver.find_element_by_css_selector("input[class*='MuiInputBase-input'][id^='mui'][value='Monthly']").click()
    
  • 使用xpath

    driver.find_element_by_xpath("//input[contains(@class, 'MuiInputBase-input') and starts-with(@id, 'mui')][@value='Monthly']").click()
    

理想情况下,要单击元素,需要为element_to_be_clickable()诱导WebDriverWait,并且可以使用以下Locator Strategies之一:

  • 使用CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[class*='MuiInputBase-input'][id^='mui'][value='Monthly']"))).click()
    
  • 使用XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[contains(@class, 'MuiInputBase-input') and starts-with(@id, 'mui')][@value='Monthly']"))).click()
    
  • 注意:您必须添加以下导入:

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

该HTML元素的input类型是text,它不是Select或下拉列表。selenium类支持Select

相关问题 更多 >

    热门问题