1. select标签也很常见,通常有单选和多选两种,单选标签格式常见如下:
<select name="NR" id="nr">
<option value="10" selected="">每页显示10条</option>
<option value="20">每页显示20条</option>
<option value="50">每页显示50条</option>
</select>
对于多选select,则多了一个multiple属性,指定为多选菜单
<select multiple="multiple" size="2">
<option value ="volvo">Volvo</option>
<option value ="saab">Saab</option>
<option value="opel">Opel</option>
<option value="audi">Audi</option>
</select>
2. selenium处理select也很简单,一种方法是找到select元素,直接点击其下的选项
select = driver.find_element_by_id("nr")
driver.find_element_by_xpath('//select[@id="nr"]/option[2]').click()
第二种方法是使用Select模块,使用前先引入,注意引入路径应为:
from selenium.webdriver.support.select import Select
找到select元素,封装到Select模块中,然后就可以调用Select自带的多种方法,使用起来比较方便简单
select = driver.find_element_by_id("nr")
Select(select).select_by_index(0)
Select模块提供的方法有以下几种,其中取消对应...选项的都是多选菜单才有的方法,用到单选菜单上会报错:
select_by_index() :通过索引定位
select_by_value() :通过value值定位
select_by_visible_text() :通过文本值定位
deselect_all() :取消所有选项
deselect_by_index() :取消对应index选项
deselect_by_value() :取消对应value选项
deselect_by_visible_text() :取消对应文本选项
first_selected_option() :返回第一个选项
all_selected_options() :返回所有的选项
最后是一个完整的例子,以百度首页设置菜单中搜索设置中每次显示条数为例:
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.select import Select
class Test_Select:
def setup(self):
self.driver = webdriver.Chrome(r"D:\Program Files\chromedriver.exe")
self.driver.get(r"https://www.baidu.com")
self.driver.implicitly_wait(10)
self.driver.maximize_window()
def test_select(self):
driver = self.driver
menu = driver.find_element_by_link_text("设置")
ActionChains(driver).move_to_element(menu).perform()
driver.find_element_by_xpath('//div[@id="wrapper"]/div[6]/a[1]').click()
# driver.find_element_by_link_text("搜索设置").click()
sleep(3)
# 1. 找到select标签和其下的option,点击即可
select = driver.find_element_by_id("nr")
driver.find_element_by_xpath('//select[@id="nr"]/option[2]').click()
sleep(3)
# 2. 使用Select模块封装的方法,先找到select元素,再封装为Select,再执行方法
Select(select).select_by_index(0)
sleep(3)
# select_by_value()
Select(select).select_by_value("50")
sleep(4)
# select_by_visible_text()
Select(select).select_by_visible_text("每页显示10条")
sleep(3)
def teardown(self):
self.driver.quit()