参考官方文档: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
一、导入(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标签的一个属性值,并不是显示在下拉框中的值
- 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()
|