參考官方文檔:https://v/selenium/docs/api/py/webdriver_support/selenium.webdriver.support.select.html?highlight=all_selected_options#selenium.webdriver.support.select.Select.all_selected_options
一、導(dǎo)入(import)
from selenium.webdriver.support.select import Select
二、選擇(select)
Select類提供了三種選擇某一選項的方法:
select_by_index(index)
select_by_value(value)
select_by_visible_text(text)
注意:
- index從 0 開始
- value是option標(biāo)簽的一個屬性值,并不是顯示在下拉框中的值
- visible_text是在option標(biāo)簽中間的值,是顯示在下拉框的值
三、反選(deselect)
有選擇必然有反選,即取消選擇。Select提供了四個方法給我們?nèi)∠瓉淼倪x擇:
deselect_by_index(index)
deselect_by_value(value)
deselect_by_visible_text(text)
deselect_all()
前三種分別于select相對應(yīng),第四種是全部取消選擇,是的,你沒看錯,是全部取消。
有一種特殊的select標(biāo)簽,即設(shè)置了multiple=”multiple”屬性的select,這種select框是可以多選的,
可以通過多次select,選擇多項選項,而通過deselect_all()來將他們?nèi)咳∠?/p>
注意:下面兩個,表示的意思一樣
#返回第一個或者當(dāng)前 被選中 的子項
print(Select(driver.find_element_by_xpath('//select[@id='nr']')).first_selected_option.text)
# 輸出當(dāng)前選擇的第一項,即顯示第二個 now = Select(driver.find_element_by_css_selector('body > form > select')).first_selected_option print(now.text)
================================================================================
from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains #from selenium.webdriver.support.select import Select from selenium.webdriver.support.ui import Select from time import sleep
driver = webdriver.Firefox() driver.implicitly_wait(10) driver.get('http://www.baidu.com')
#--------------------------------------------------------------------------------
link = driver.find_element_by_link_text('設(shè)置') ActionChains(driver).move_to_element(link).perform() #鼠標(biāo)懸停在上面 sleep(5)
driver.find_element_by_class_name('setpref').click() # 打開搜索設(shè)置 sleep(2)
#-------------------------------------------------------------------------
sleep(3) print('顯示第二個子項(2):') Select(driver.find_element_by_xpath('//select[@id='nr']')).select_by_index(1) #選擇第二個options子項 ,每頁顯示20條 print(Select(driver.find_element_by_xpath('//select[@id='nr']')).first_selected_option.text) #返回第一個或者當(dāng)前 被選中 的子項
sleep(3) print('顯示第三個子項(50):') Select(driver.find_element_by_xpath('//select[@id='nr']')).select_by_value('50') #選擇value為'每頁顯示50條'的子項,即選擇第三個子項 print(Select(driver.find_element_by_xpath('//select[@id='nr']')).first_selected_option.text) #返回第一個或者當(dāng)前 被選中 的子項
sleep(3) print('顯示第二個子項(20):') Select(driver.find_element_by_xpath('//select[@id='nr']')).select_by_visible_text('每頁顯示20條') #選擇text值為'每頁顯示20條'的子項 print(Select(driver.find_element_by_xpath('//select[@id='nr']')).first_selected_option.text) #返回第一個或者當(dāng)前 被選中 的子項
sleep(3) print('顯示當(dāng)前被選中的子項(第二個子項20):') print(Select(driver.find_element_by_xpath('//select[@id='nr']')).first_selected_option.text) #返回第一個或者當(dāng)前 被選中 的子項 #每頁顯示20條
#-------------------------------------------------------------------------------------
options = driver.find_elements_by_xpath('//*[@id='nr']/option')
options[1].click() #第二個子項被選中 sleep(2)
options[2].click() #第三個子項被選中 sleep(2)
options[0].click() #第一個子項被選中 sleep(2)
#-----------------------------------------------------------------------
print(options[0].text) print(options[1].text) print(options[2].text)
#-----------------------------------------------------------------------
driver.quit()
顯示第二個子項(2): 每頁顯示20條 顯示第三個子項(50): 每頁顯示50條 顯示第二個子項(20): 每頁顯示20條 顯示當(dāng)前被選中的子項(第二個子項20): 每頁顯示20條
每頁顯示10條 每頁顯示20條 每頁顯示50條
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
===============================================================================================================
from selenium import webdriver from selenium.webdriver.support.ui import Select from time import sleep
driver = webdriver.Firefox() driver.get('https://www.runoob.com/runcode') # 打開瀏覽器,進(jìn)入演示頁面
driver.find_element_by_css_selector('#codeinp').clear() # 定位輸入框文本域 # 清空文本域
# 輸入多選下拉框的演示源碼 (multiple='multiple\') texts = '<html> ' \ '<body><form><select multiple=\'multiple\' name=\'cars\'><option value=\'volvo\'>Volvo</option>' \ '<option value=\'saab\'>Saab</option><option value=\'fiat\'>Fiat</option>\' \ \'<option value=\'audi\'>Audi</option></select></form></body></html>'
driver.find_element_by_css_selector('#codeinp').send_keys(texts)
driver.find_element_by_css_selector('#btrun').click() # 點擊提交代碼 sleep(2)
#--------------------------------------------------------------------------------------------------------
all_handles = driver.window_handles driver.switch_to.window(all_handles[1]) #切換到新的打開的運行頁面
#------------------------------------------------------------------------------------------------------- # 選擇全部的選項(多選),一個接著一個選擇,直到全部選擇
Select(driver.find_element_by_css_selector('body > form > select')).select_by_index(0) sleep(1)
Select(driver.find_element_by_css_selector('body > form > select')).select_by_index(1) sleep(1)
Select(driver.find_element_by_css_selector('body > form > select')).select_by_index(2) sleep(1)
Select(driver.find_element_by_css_selector('body > form > select')).select_by_index(3) sleep(1)
#----------------------------------------------------------------------------------------------------------------
# 取消選擇第一項選項(頁面上可以觀察到變化) Select(driver.find_element_by_css_selector('body > form > select')).deselect_by_index(0) sleep(1) # 輸出當(dāng)前選擇的第一項,即顯示第二個 now = Select(driver.find_element_by_css_selector('body > form > select')).first_selected_option print(now.text)
#取消第二個選項 #Select(driver.find_element_by_css_selector('body > form > select')).deselect_by_value('\'saab\'') Select(driver.find_element_by_css_selector('body > form > select')).deselect_by_visible_text('Saab') sleep(3)
#即取消三、四選項 Select(driver.find_element_by_css_selector('body > form > select')).deselect_all() #取消所有選項 sleep(3)
#---------------------------------------------------------------------------------------------------------
driver.close()
|