下拉列表,非select元素
在web界面上,有一些下拉列表里,并不是select选项元素,处理这种下拉框时,主要是元素定位。
比如百度首页的,设置按钮,鼠标悬浮时,出来下拉列表:
选择选项的实现代码:
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium import webdriver
chr_driver = webdriver.Chrome()
chr_driver.maximize_window()
chr_driver.get("https://www.baidu.com/")
# //*[@id="s-usersetting-top"]
ele = chr_driver.find_element_by_xpath('//*[@id="s-usersetting-top"]')
# 实例化,悬浮、点击
ActionChains(chr_driver).move_to_element(ele).perform()
# 下拉列表,非select元素
# 获取定位
loc = (By.XPATH, '//a[text()="高级搜索"]')
WebDriverWait(chr_driver, 20).until(EC.visibility_of_element_located(loc))
# 点击列表选项“高级检索”
chr_driver.find_element(*loc).click()
效果:
下拉列表,select元素
对于web页面是,下拉列表为select元素的,selenium专门提供了一个类Select进行处理。
比如下面的新闻网站:
选择下拉框中的值,实现代码:
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium import webdriver
from selenium.webdriver.support.select import Select
import time
chr_driver = webdriver.Chrome()
chr_driver.maximize_window()
chr_driver.get("https://news.sina.com.cn/")
"""
下拉列表,select元素,处理select元素
"""
# 等待元素可见后,查找元素
select_loc = (By.XPATH, '//select[@name="channel"]')
WebDriverWait(chr_driver, 20).until(EC.visibility_of_element_located(select_loc))
ele = chr_driver.find_element(*select_loc)
s = Select(ele)
"""
选择下拉列表中的选项时,有以下三种方式
"""
# 下标方式选择元素
s.select_by_index(1)
time.sleep(3)
# value属性选择元素
s.select_by_value("tech")
time.sleep(3)
# 文本内容选择元素
s.select_by_visible_text("娱乐")
进行切换时,并不会出现下拉列表,而是直接切换值,效果如下: