1. 程式人生 > >Python中Selenium解決網頁下拉選單按鈕

Python中Selenium解決網頁下拉選單按鈕

1.匯入(import)

你可以用以下方式匯入:

from selenium.webdriver.support.ui import Select
# 或者直接從select匯入
# from selenium.webdriver.support.select import Select
  • 1
  • 2
  • 3

這兩種方法沒有本質的區別,你如果去看ui庫,你會發現,它也只是把select import進去。

2.選擇(select)

Select類提供了三種選擇某一選項的方法:

select_by_index(index)
select_by_value(value)
select_by_visible_text
(text)
  • 1
  • 2
  • 3

針對於示例網站中的第一個select框:

<select id="s1Id">
<option></option>
<option value="o1" id="id1">o1</option>
<option value="o2" id="id2">o2</option>
<option value="o3" id="id3">o3</option>
</select>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

我們可以這樣定位:

from selenium import webdriverd
from
selenium.webdriver.support.ui import Select driver = webdriver.Firefox() driver.get('http://sahitest.com/demo/selectTest.htm') s1 = Select(driver.find_element_by_id('s1Id')) # 例項化Select s1.select_by_index(1) # 選擇第二項選項:o1 s1.select_by_value("o2") # 選擇value="o2"的項 s1.select_by_visible_text("o3") # 選擇text="o3"的值,即在下拉時我們可以看到的文字
driver.quit()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

以上是三種選擇下拉框的方式,注意:

  1. index從 0 開始
  2. value是option標籤的一個屬性值,並不是顯示在下拉框中的值
  3. visible_text是在option標籤中間的值,是顯示在下拉框的值

3.反選(deselect)

自然的,有選擇必然有反選,即取消選擇。Select提供了四個方法給我們取消原來的選擇:

deselect_by_index(index)
deselect_by_value(value)
deselect_by_visible_text(text)
deselect_all()
  • 1
  • 2
  • 3
  • 4

前三種分別於select相對應,第四種是全部取消選擇,是的,你沒看錯,是全部取消。有一種特殊的select標籤,即設定了multiple=”multiple”屬性的select,這種select框是可以多選的,你可以通過多次select,選擇多項選項,而通過deselect_all()來將他們全部取消。

全選?NO,不好意思,沒有全選,不過我想這難不倒你,尤其是看了下面的這幾個屬性。

4.選項(options)

當我們選擇了選項之後,想要看看選擇的是哪項,所選的是否是我想選的,怎麼辦?別擔心,Select為你提供了相應的方法(或者應該說是屬性了):

options
all_selected_options
first_selected_option
  • 1
  • 2
  • 3

上面三個屬性,分別返回這個select元素所有的options、所有被選中的options以及第一個被選中的option。

1 想檢視一個select所有的選項

...

s1 = Select(driver.find_element_by_id('s1Id'))

for select in s1.options:
    print select.text

...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

結果:


o1
o2
o3
  • 1
  • 2
  • 3
  • 4

一共四項,第一項為空字串。

2 想檢視我已選中的選項

...

s4 = Select(driver.find_element_by_id('s4Id'))

s4.select_by_index(1)
s4.select_by_value("o2val")
s4.select_by_visible_text("With spaces")
s4.select_by_visilbe_text("    With nbsp")

for select in s4.all_selected_options:
    print select.text

...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

結果:

o1
o2
    With spaces
    With nbsp
  • 1
  • 2
  • 3
  • 4

輸出所有被選中的選項,適合於能多選的框,僅能單選的下拉框有更合適的方法(當然用這種方法也可以)。這裡需要注意的是兩種不同空格的選擇:

  1. 空格’ ‘,這種在以visible_text的方式選擇時,不計空格,從第一個非空格字元開始
  2. 網頁空格& nbsp;,對於這種以nbsp為空格的選項,在以visible_text的方式選擇時,需要考慮前面的空格,每一個nbsp是一個空格

3 想要檢視選擇框的預設值,或者我以及選中的值

...

s2 = Select(driver.find_element_by_id('s2Id'))

print s2.first_selected_option.text

s2.select_by_value("o2")
print s2.first_selected_option.text

...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

結果:


o2
  • 1
  • 2

第一行輸出預設選項的文字——空字串”“;第二行輸出選中的選擇的文字——”o2”。

5.總結

  • Select提供了三種選擇方法:

    select_by_index(index) ——通過選項的順序,第一個為 0 
    select_by_value(value) ——通過value屬性 
    select_by_visible_text(text) ——通過選項可見文字

  • 同時,Select提供了四種方法取消選擇:

    deselect_by_index(index) 
    deselect_by_value(value) 
    deselect_by_visible_text(text) 
    deselect_all()

  • 此外,Select提供了三個屬性方法給我們必要的資訊:

    options ——提供所有的選項的列表,其中都是選項的WebElement元素 
    all_selected_options ——提供所有被選中的選項的列表,其中也均為選項的WebElement元素 
    first_selected_option ——提供第一個被選中的選項,也是下拉框的預設值

  • 通過Select提供的方法和屬性,我們可以對標準select下拉框進行任何操作,但是對於非select標籤的偽下拉框,就需要用其他的方法了,這個有機會再討論。