selenium处理页面常见问题(三):select下拉选项菜单

1. select标签也很常见,通常有单选和多选两种,单选标签格式常见如下:

对于多选select,则多了一个multiple属性,指定为多选菜单

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() :返回所有的选项

最后是一个完整的例子,以百度首页设置菜单中搜索设置中每次显示条数为例:

selenium处理页面常见问题(三):select下拉选项菜单_第1张图片

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()

 

你可能感兴趣的:(selenium)