前言
最近由於工作原因,更新慢了一點,今天終於抽出一點時間給大家繼續更新selenium系列,學習的腳本不能停止,希望小伙伴能多多支持。
本篇以百度設置下拉選項框為案例,詳細介紹select下拉框相關的操作方法。
一、認識select
1.打開百度-設置-搜索設置界面,如下圖所示

<select id="nr" name="NR">
3.選項有三個
<option selected="" value="10">每頁顯示10條</option>
<option value="20">每頁顯示20條</option>
<option value="50">每頁顯示50條</option>
二、二次定位
1.定位select里的選項有多種方式,這里先介紹一種簡單的方法:二次定位
2.基本思路,先定位select框,再定位select里的選項

4.還有另外一種寫法也是可以的,把最下面兩步合並成為一步:
三、直接定位
1.有很多小伙伴說firebug只能定位到select框,不能定位到里面的選項,其實是工具掌握的不太熟練。小編接下來教大家如何定位里面的選項。
2.用direbug定位到select后,下方查看元素屬性地方,點select標簽前面的+號,就可以展開里面的選項內容了。


1.除了上面介紹的兩種簡單的方法定位到select選項,selenium還提供了更高級的玩法,導入Select模塊。直接根據屬性或索引定位。
2.先要導入select方法:
from selenium.webdriver.support.select import Select

1.Select模塊里面除了index的方法,還有一個方法,通過選項的value值來定位。每個選項,都有對應的value值,如
<select id="nr" name="NR">
<option selected="" value="10">每頁顯示10條</option>
<option value="20">每頁顯示20條</option>
2.第二個選項對應的value值就是"20":select_by_value("20")

1.Select模塊里面還有一個更加高級的功能,可以直接通過選項的文本內容來定位。
2.定位“每頁顯示50條”:select_by_visible_text("每頁顯示50條")

七、Select模塊其它方法
1.select里面方法除了上面介紹的三種,還有更多的功能如下

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() :返回所有的選項
八、整理代碼如下:
# coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.select import Select
driver = webdriver.Firefox()
url = "https://www.baidu.com"
driver.get(url)
driver.implicitly_wait(20)
# 鼠標移動到“設置”按鈕
mouse = driver.find_element_by_link_text("設置")
ActionChains(driver).move_to_element(mouse).perform()
driver.find_element_by_link_text("搜索設置").click()
# 通過text:select_by_visible_text()
s = driver.find_element_by_id("nr")
Select(s).select_by_visible_text("每頁顯示50條")
# # 分兩步:先定位下拉框,再點擊選項
# s = driver.find_element_by_id("nr")
# s.find_element_by_xpath("//option[@value='50']").click()
# # 另外一種寫法
# driver.find_element_by_id("nr").find_element_by_xpath("//option[@value='50']").click()
# # 直接通過xpath定位
# driver.find_element_by_xpath(".//*[@id='nr']/option[2]").click()
# # 通過索引:select_by_index()
# s = driver.find_element_by_id("nr")
# Select(s).select_by_index(2)
# # 通過value:select_by_value()
# s = driver.find_element_by_id("nr")
# Select(s).select_by_value("20")
在學習過程中有遇到疑問的,可以加selenium(python+java) QQ群交流:646645429
《selenium+python高級教程》已出書:selenium webdriver基於Python源碼案例
(購買此書送對應PDF版本)