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

Posted 小白龙白龙马

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()
 

以上是关于python+selenium下拉列表option对象操作方法一的主要内容,如果未能解决你的问题,请参考以下文章

selenium基础(下拉菜单操作)

selenium--单选下拉列表

selenium-获取下拉选择框value默认的文本,而不是下拉框所有的文本值

Selenium+python --定位下拉列表框并选取内容

(selenium+python)_UI自动化05_定位select下拉列表

selenium python 针对js生成的下拉列表,如何选择隐藏的选项