簡體   English   中英

Select 下拉值使用 Python Selenium

[英]Select DropDown value using Python Selenium

我正在嘗試使用 Python 中的 Selenium 來 select 下拉值,但無法這樣做。 我從“復制選擇器”得到的代碼是這樣的。

#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: Message: Select 僅適用於元素,不適用於

我也試過

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

給出以下錯誤TypeError: 'str' object is not callable

任何幫助表示贊賞。

以下是截圖DropDown 組件截圖

嘗試使用expected_conditions 見下文。 browser =.....替換為您的代碼。

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

browser = .....

# ADD YOUR CODE TO GET TO THE PAGE WITH THE BUTTON

to_click = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.XPATH, "//*[@id='mui-12848'][2]")))

to_click.click()

該 HTML 元素的input類型是text ,它不是Select或下拉菜單。 selenium class 支持Select

此錯誤消息...

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

...暗示您嘗試使用Select() class ,它僅適用於<select>元素,其中所需的元素是<input>元素。

要單擊<input>元素,您可以使用以下任一定位器策略

  • 使用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

語法不正確。 它應該像driver.find_element(By.XPATH, "//*[@id='mui-12848']").click()

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM