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

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

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值