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

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) 根据文本来定位

下面所有操作都基于这个HTML源码来操作:
在这里插入图片描述

先导入包:

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) # ['4EB3B1169268CB655539F68F19F4A23C', '8C854A7DC612CF27FF3CD6F8DD4997E1']
driver.switch_to.window(handles[1]) # 切换到新的标签页
sleep(1)
print(driver.title)

sleep(5)

2、iframe内嵌窗体

在iframe中存在的元素,selenium是无法直接获取到的。所有在操作iframe的元素时,需要先切换到iframe才可以
红色框出的就是第一层iframe,绿色的就是第二层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.qq.com')
# 切换至iframe,以便于操作该iframe中的元素
driver.switch_to.frame(driver.find_element('xpath', '//div[@class="QQMailSdkTool_login_loginBox_qq"]/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.qq.com/')
sleep(3)

运行的结果如下:
1、切换新的标签
在这里插入图片描述
2、创建新的浏览器
在这里插入图片描述

五、三类等待

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值