首页 > 解决方案 > 选择下拉列表中的一个元素 -selenium -python

问题描述

我尝试在运动下拉列表中选择运动“足球”,但无法点击它。

我尝试了 Select() 方法:

    driver = webdriver.Chrome()
    url = "https://www.flashscore.com/"
    driver.get(url)
                        
    Team = 'Paris SG'
    Type = 'Teams'
    sport = 'Football'
                
buttonSearch = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".header__button--search"))).click()
fill_search_bar = driver.find_element(By.CSS_SELECTOR, ".input___1NGxU3-")
fill_search_bar.clear()
fill_search_bar.send_keys(Team)
driver.find_element(By.CSS_SELECTOR, ".dropDown").click()
select_sport = Select(driver.find_element(By.XPATH,"//div[contains(@class, 'dropDown__list')]"))
select_sport.select_by_visible_text(sport)
    

此代码返回此错误:UnexpectedTagNameException: Message: Select only works on <select> elements, not on <div>

这是我的第二个版本:

fill_search_bar = driver.find_element(By.CSS_SELECTOR, ".input___1NGxU3-")
fill_search_bar.clear()
fill_search_bar.send_keys(Team)
driver.find_element(By.CSS_SELECTOR, ".dropDown").click()
select_sport = WebDriverWait(driver, timeout=10).until(EC.element_to_be_clickable((By.XPATH,"//[@class='dropDown__list']/[contains(text(),'"+ sport +"')]"))).click()

此代码返回此错误:selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//div[@class='dropDown__list']/div[contains(text(),'Football')]"}

我怎么解决这个问题 ?

标签: pythonselenium

解决方案


为简单起见,我建议将wait until课程分为两行。它完全是可选的,不会有太大的不同。

wait = WebDriverWait(driver, 300)
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".header__button--search")))
element_to_be_clicked=driver.find_element_by_css_selector(".header__button--search")
element_to_be_clicked.click()

对于第二部分,尝试使用下拉列表中的选项值:

fill_search_bar.clear()
fill_search_bar.send_keys(Team)
driver.find_element_by_xpath("//div[@class='dropDown__selectedValue dropDownValueSelected___3msxRQS']").click()
select_sport=Select(driver.find_element_by_class("dropDown__list dropDownList___3V-ppVu"))
select_sport.select_by_value('1')  #football has value 1 in the list

推荐阅读