1.下拉列表类型
下拉列表的类型可以分为 select 标签和非 select 标签,如:
2. Select 下拉列表处理
针对 select 标签的下拉列表,Selenium 提供了 Select 类进行操作:
from selenium.webdriver.support.ui import Select
2.1. Select 方法列表
方法 | 含义 |
---|---|
options() | 返回所有选项的列表 |
all_selected_options() | 返回所有选中的选项的列表 |
first_selected_option() | 返回第一个选中的选项(或普通选择中的当前选中选项) |
select_by_value() | 通过value值定位 |
select_by_index() | 通过索引定位 |
select_by_visible_text() | 通过文本值定位 |
deselect_all() | 取消所有选中的选项,仅在select支持多选时有效,否则抛出NotImplementedError |
deselect_by_value() | 取消对应value选项的选中状态 |
deselect_by_index() | 取消对应index选项的选中状态 |
deselect_by_visible_text() | 取消对应text选项的选中状态 |
2.2. Select 示例代码
import time
from selenium import webdriver
from selenium.webdriver.support.ui import Select
driver = webdriver.Chrome()
driver.get("http://sahitest.com/demo/selectTest.htm")
driver.implicitly_wait(10)
s = driver.find_element_by_id('s1')
options_list = Select(s).options # 返回所有选项
for option in options_list:
print(option.text) # 打印每个选项的文本值
Select(s).select_by_index(2) # 选中索引值为2的选项(index从0开始)
time.sleep(2)
Select(s).select_by_value('49') # 选中value值为49的选项:Fax
time.sleep(2)
Select(s).select_by_visible_text('Mail') # 选中文本为Mail的选项
time.sleep(2)
driver.quit()
3. 非 Select 下拉列表处理
除了 select 标签的下拉列表,还有很多非 select 标签的下拉列表。方法其实很简单,基本思路:先点击打开下拉列表,然后在定位选项。
import time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://www.hao123.com/")
driver.implicitly_wait(10)
driver.find_element_by_css_selector(".tabs-toggle-hook").click() # 点击搜索类型,打开下拉列表
# 等待下拉列表可见
WebDriverWait(driver, 10).until(
EC.visibility_of_element_located(("css selector", ".tabs-hook"))
)
driver.find_element_by_xpath("//div[@monkey='searchTab']/a[text()='图片']").click() # 通过选项的文本值"图片"定位
time.sleep(2)
driver.quit()