Selenium入门学习—-下拉框,滚动条等(三)

Selenium入门学习—-下拉框,滚动条等(三)下拉框的操作就是选择我们需要用到的选项

大家好,欢迎来到IT知识分享网。

Selenium入门学习—-下拉框,滚动条等(三)

一、下拉框的操作

下拉框的操作就是选择我们需要用到的选项。如下图:

在这里插入图片描述

我们有时候需要完成这种操作。下拉框的操作我们一般用Select类。

Select类是Selenium为了操作select标签而特殊封装的。

  • 思路分析:
    • 导包。from selenium.webdriver.support.ui import Select
    • 实例化Select类。Select(driver.find_element(By.ID,'s1Id'))
    • 调用方法。有三种
      • select_by_index(index) 根据索引来定位 ,从0开始
      • select_by_value(value) 根据value值来定位
      • select_by_visible(text) 根据文本来定位

先导入包:

from selenium import webdriver from selenium.webdriver.support.ui import Select from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get('http://sahitest.com/demo/selectTest.htm') 

1、选中操作

# 先定位到下拉框元素 s1 = Select(driver.find_element(By.ID,'s1Id')) # 选择选项。选择第一个o1 # 方法1: s1.select_by_index(1) # 通过索引来定位。基于下标获取,下标从1开始 # 方法2: s1.select_by_value('o1') #通过value值来定位 # 方法3: s1.select_by_visible_text('o1') # 通过文本值来定位 sleep(1) 

2、返回所有选项

for option in s1.options: print(option.text) 

在这里插入图片描述

3、返回被选中的选项

s1.select_by_visible_text('o1') # 通过文本值来定位 sleep(1) # 返回所有被选中的选项 for option in s1.all_selected_options: print(option.text) 

在这里插入图片描述

完整源码:

from time import sleep from selenium import webdriver from selenium.webdriver.support.ui import Select from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get('http://sahitest.com/demo/selectTest.htm') # 先定位到下拉框元素 s1 = Select(driver.find_element(By.ID,'s1Id')) # 选择选项。选择第一个o1 # 方法1: s1.select_by_index(1) # 通过索引来定位 # 方法2: s1.select_by_value('o1') #通过value值来定位 # # 方法3: s1.select_by_visible_text('o1') # 通过文本值来定位 sleep(1) # 返回所有选项 for option in s1.options: print(option.text) # 返回被选中的选项 for option in s1.all_selected_options: print(option.text) driver.quit() 

4、取消选中操作

driver = webdriver.Chrome() driver.get('http://sahitest.com/demo/selectTest.htm') des1 = Select(driver.find_element(By.ID,'s1Id')) # 根据index取消选中 des1.deselect_by_index(1) sleep(1) # 根据value取消选中 des1.deselect_by_value('o1') sleep(1) # 根据文本取消选中 des1.deselect_by_visible_text('o1') sleep(1) # 取消所有选项 des1.deselect_all() driver.quit() 

二、滚动条操作

1、竖向滚动操作(上下)

execute_script(“document.documentElement.scrollTop=xx”)

xx为设置的数值,0-10000。0表示最顶部,10000表示最底部

from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get('http://www.baidu.com') driver.maximize_window() driver.find_element('id','kw').send_keys('selenium滚动条方法') driver.find_element('id','su').click() sleep(2) driver.execute_script('document.documentElement.scrollTop=10000') # 滚动到最底部 sleep(3) driver.execute_script('document.documentElement.scrollTop=0') # 滚动到顶部 sleep(3) driver.quit() 

2、横行滚动操作

横行滚动是通过控制坐标来实现的。scrollTo(x,y)

execute_script(scrollTo(x,y))

三、selenium元素的操作

1、浏览器操作

driver.maximize_window() 浏览器最大化

driver.set_window_size(2000, 2000) 浏览器尺寸的设置

driver.close() 关闭当前的标签页,后台进程依旧存在。

driver.quit() 用于结束driver进程

2、获取页面的标题信息

print(driver.title)

3、鼠标悬停

driver = webdriver.Chrome() driver.get('http://www.baidu.com') driver.maximize_window() # 鼠标悬停。通过ActionChains类实现。过程中请勿操作光标 (ActionChains(driver).move_to_element(driver.find_element( 'xpath', '//span[text()="设置"]')).perform()) # perform方法表示执行的意思 sleep(2) driver.find_element('xpath', '//span[text()="高级搜索"]').click() sleep(5) driver.quit() 

四、多窗口切换

1、handles句柄

我们在用百度搜索资料的时候,有时候需要点击链接内容查看,这是就会新增一个窗口,这就是多窗口。

1、driver.current_window_handle获取当前窗口

2、driver.window_handles获取所有窗口

selenium在打开新的标签页后,实际句柄还是在最初第一个句柄页。(也就是在最初的窗口)。无法操作新的窗口,必须切换句柄才可以。

from time import sleep from selenium import webdriver from selenium.webdriver.chrome.service import Service driver = webdriver.Chrome() driver.get('http://www.baidu.com') driver.implicitly_wait(5) # 窗口最大化 driver.maximize_window() sleep(2) driver.find_element('id', 'kw').send_keys('selenium学习') sleep(2) driver.find_element('id', 'su').click() # 打开新的标签页 driver.find_element('xpath', '//*[@id="1"]/div/h3/a').click() sleep(3) print(driver.title) # 即使打开了新的句柄,这里输出的还是最初的句柄标题 # 切换句柄 handles = driver.window_handles # 通过window_handles,获取所有句柄的方式(即获取所有的窗口) driver.close() #关闭旧的标签页 # 以列表的形式打印出所有句柄 print(handles) # ['4EB3BCBF68F19F4A23C', '8C854A7DC612CF27FF3CD6F8DD4997E1'] driver.switch_to.window(handles[1]) # 切换到新的标签页 sleep(1) print(driver.title) sleep(5) 

2、iframe内嵌窗体

from time import sleep from selenium import webdriver driver = webdriver.Chrome() driver.get('http://www.baidu.com') driver.implicitly_wait(5) driver.get('http://mail..com') # 切换至iframe,以便于操作该iframe中的元素 driver.switch_to.frame(driver.find_element('xpath', '//div[@class="MailSdkTool_login_loginBox_"]/iframe')) # 切换至第二层iframe driver.switch_to.frame(driver.find_element('id', 'ptlogin_iframe')) driver.find_element('link text', '注册账号').click() driver.switch_to.default_content() # 切换回默认窗体,也就是最原始的html之中 sleep(20) 

注意:iframe操作结束后,需要切换回来默认的状态,才可以操作iframe以外的内容。

3、浏览器操作行为

自动生成新的窗口或者浏览器

from time import sleep from selenium import webdriver driver = webdriver.Chrome() driver.get('http://www.baidu.com') sleep(2) # 在百度窗口基础上,创建新的标签(新的窗口) # driver.switch_to.new_window('tab') # 创建新的标签页 driver.switch_to.new_window('window') # 创建新的浏览器 driver.get('https://mail..com/') sleep(3) 

五、三类等待

1、强制等待

强制等待是最简单也是最不推荐使用的一种等待方式。它通过直接暂停程序执行指定的时间长度,来等待网页上的元素变得可用或可见。

优点:

  • 实现简单,容易理解。

缺点:

  • 浪费时间:可能等待的时间远远超出了实际需要的时间。
  • 缺乏灵活性:无法应对网页响应时间的变化,有时可能等待不足,有时又过度等待。
sleep(5) time.sleep(1) 

2、隐式等待

隐式等待是一种全局等待方式,只需要设置一次,Selenium WebDriver 会在查找所有元素时自动应用该等待。如果在指定的时间内未找到元素,Selenium会抛出一个NoSuchElementException异常。

优点:

  • 简单易用:设置一次,适用于后续所有的元素查找操作。
  • 自动化:查找元素时,如果未立即找到,WebDriver会等待更长的时间直到超时,或元素出现。

缺点:

  • 可能影响测试脚本的执行效率,因为每次查找元素时都会应用等待时间,即使元素已经可用。
driver.implicitly_wait(10) 隐式等待最大等待时间为5

3、显示等待

显示等待允许你为某个特定的条件设置等待时间,直到该条件成立。它通常与某些预期条件一起使用,例如检查元素是否可见、是否可点击等等。显式等待会返回等待的元素本身。

优点:

  • 高效灵活:只有在需要时才等待,并且可以针对不同的元素设置不同的等待条件。
  • 准确性高:能够更精确地等待特定条件的满足,而不是简单地等待固定的时间。

缺点:

  • 实现相对复杂:需要写更多的代码来指定等待条件。
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("http://www.baidu.com") try: element = WebDriverWait(driver, 10).until(driver.find_element(By.ID, "someId")) finally: driver.quit() 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/130243.html

(0)
上一篇 2025-08-18 16:33
下一篇 2025-08-18 17:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信