python+selenium下拉列表option對象操作方法一


參考官方文檔:https://selenium.dev/selenium/docs/api/py/webdriver_support/selenium.webdriver.support.select.html?highlight=all_selected_options#selenium.webdriver.support.select.Select.all_selected_options

 

一、導入(import)

from selenium.webdriver.support.select import Select

 

二、選擇(select)

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

 select_by_index(index)
select_by_value(value)
select_by_visible_text(text)

注意:

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

 

三、反選(deselect)

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

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

前三種分別於select相對應,第四種是全部取消選擇,是的,你沒看錯,是全部取消。

 

有一種特殊的select標簽,即設置了multiple=”multiple”屬性的select,這種select框是可以多選的,

 

可以通過多次select,選擇多項選項,而通過deselect_all()來將他們全部取消。

 

注意:下面兩個,表示的意思一樣

                                                                                                                         

                                                           #返回第一個或者當前  被選中  的子項
print(Select(driver.find_element_by_xpath("//select[@id='nr']")).first_selected_option.text)  

 

                                                            # 輸出當前選擇的第一項,即顯示第二個
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("設置")
ActionChains(driver).move_to_element(link).perform() #鼠標懸停在上面
sleep(5)

driver.find_element_by_class_name("setpref").click() # 打開搜索設置
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) #返回第一個或者當前 被選中 的子項


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) #返回第一個或者當前 被選中 的子項


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) #返回第一個或者當前 被選中 的子項


sleep(3)
print('顯示當前被選中的子項(第二個子項20):')
print(Select(driver.find_element_by_xpath("//select[@id='nr']")).first_selected_option.text) #返回第一個或者當前 被選中 的子項 #每頁顯示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條
顯示當前被選中的子項(第二個子項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") # 打開瀏覽器,進入演示頁面

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)
# 輸出當前選擇的第一項,即顯示第二個
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()
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM