如何在Python(Jupyter Notebook)中使用Selenium选择下拉框选项
你之前的代码直接在WebElement对象上调用Select类的专属方法,自然不会生效。Selenium所有select_by_*类的方法都需要先将找到的下拉元素包装为Select实例后才能调用,以下是对应场景的解决方案:
场景1:目标元素是原生<select>标签
先导入必要依赖:
from selenium.webdriver.support.ui import Select from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait
替换你原来的年份选择部分代码即可:
# 先等待元素加载完成可交互,避免页面未渲染完成导致操作失效 typetextyear = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.ID, "couples-search-year")) ) # 将元素包装为Select实例 year_select = Select(typetextyear) # 按可见文本选择2021,三种方式选一种即可 year_select.select_by_visible_text("2021") # 可选:按索引选择,注意索引从0开始,若2021是第二个选项可使用该方法 # year_select.select_by_index(1) # 可选:按选项的value属性值选择 # year_select.select_by_value("2021")
场景2:目标是自定义实现的非原生下拉框
很多现代网站会用div等标签自定义下拉组件,这种场景原生Select方法完全不生效,用点击选择方案即可:
# 点击年份输入框,展开下拉选项列表 typetextyear.click() # 等待2021选项加载完成后点击 year_option = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, "//*[contains(text(),'2021')]")) ) year_option.click()
兜底方案
如果上述方案都不生效,可以直接用JavaScript强制给输入框赋值:
driver.execute_script("arguments[0].value = '2021';", typetextyear)
内容的提问来源于stack exchange,提问作者Trevor
相关产品推荐
相关产品推荐

