有时我们会碰到下拉框,WebDriver提供了Select类来处理下拉框。
如百度搜索设置的下拉框,如下图:
from selenium import webdriver
from selenium.webdriver.support.select import Select
from time import sleep
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('http://www.baidu.com')
# 鼠标悬停至“设置”链接
driver.find_element_by_link_text('设置').click()
sleep(1)
# 打开搜索设置
driver.find_element_by_link_text("搜索设置").click()
sleep(2)
# 搜索结果显示条数
sel = driver.find_element_by_xpath("//select[@id='nr']")
Select(sel).select_by_value('50') # 显示50条
# ……
driver.quit()
Select类用于定位select标签。
select_by_value() 方法用于定位下接选项中的value值。
from selenium import webdriver import time from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome() driver.implicitly_wait(10)
driver.get('http://www.baidu.com')
link = driver.find_element_by_xpath('//*[@id="s-usersetting-top"]')
ActionChains(driver).move_to_element(link).perform() time.sleep(2)
driver.find_element_by_class_name('setpref').click() time.sleep(2)
driver.find_element_by_xpath('//span[@id="se-setting-3"]/span[3]/label').click()
driver.quit()
ToT 创建于 2020-12-10 11:38:57
driver.quit()
我测试的完整通过的代码
ToT 创建于 2020-12-10 11:35:53
selenium.common.exceptions.UnexpectedTagNameException: Message: Select only works on elements, not on 代码报错如上,发现百度的这个并不是一个下拉框,所以用select方法会报错 我使用直接定位的方法,可以成功 driver.find_element_by_xpath('//[@id="se-setting-3"]/span[3]/label').click() driver.find_element_by_xpath('//[@id="se-setting-7"]/a[2]').click()
Suqin 创建于 2020-08-24 18:34:14
修改原文一处错误
鼠标悬停至“设置”链接
ActionChains(driver).move_to_element(driver.find_element_by_link_text('设置')).perform()
其它地方都没问题
Orange 创建于 2019-12-26 14:21:27
sel = driver.find_element_by_xpath("//select[@id='nr']") #这个写法运行会出现错误,需要改成下面的写法才可以: sel = driver.find_element_by_xpath("//*[@id='nr']") 谁能告诉我为什么呢?
ella 创建于 2019-11-21 06:31:48
#coding=utf-8 #作者:徐婷 #时间:2019.04.22 #描述:下拉框选择 #这个我跑通了,大家可以参考下
from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.support.select import Select from time import sleep
driver = webdriver.Chrome() 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(2)
#打开设置搜索 driver.find_element_by_class_name("setpref").click() sleep(2)
#搜索结果显示条数 sel = driver.find_element_by_xpath("//*[@id='nr']") Select(sel).select_by_value("50") #显示50条 #...
driver.quit()
尘埃24 创建于 2019-04-22 14:34:13
复制原码过去都是错的
zq 创建于 2019-04-11 15:48:20
se = driver.find_element_by_xpath("//select[@id='nr']") se = driver.find_element_by_xpath("//select[@name='NR']") se = driver.find_element_by_xpath("//[@id='nr']") se = driver.find_element_by_xpath("//[@name='NR']") 怎么写都是错的
这句话怎么写都是错的
zq 创建于 2019-04-11 15:46:02
鼠标悬停至“设置”链接
driver.find_element_by_link_text('设置').click()
你注释是鼠标悬停,但是代码写的是点击事件。
z977690557 创建于 2019-04-03 16:18:35