Selenium WebDriver API 中涉及的一些常用方法和类

Selenium WebDriver API 是 Selenium 提供的一组方法和类,用于控制浏览器和操作 Web 元素。这些 API 提供了丰富的功能,包括但不限于:

1. **查找元素**:通过不同的定位方式(如ID、Class Name、XPath等)在页面中查找元素。
2. **模拟用户操作**:包括点击、输入文本、清除文本、提交表单等操作。
3. **处理弹出框**:可以处理页面中的警告框、确认框和提示框。
4. **窗口和标签页管理**:可以打开新的窗口或标签页,切换窗口,关闭窗口等操作。
5. **浏览器导航**:可以前进、后退、刷新页面等浏览器导航操作。
6. **执行 JavaScript**:可以在页面上执行 JavaScript 脚本。
7. **等待机制**:包括隐式等待和显式等待,用于处理页面加载延迟、元素可见性等情况。
8. **浏览器设置**:可以设置浏览器的参数和选项,如窗口大小、浏览器语言等。
总之,Selenium WebDriver API 提供了丰富的工具和接口,使得开发人员可以轻松地控制浏览器和操作页面元素,实现自动化测试脚本的编写和执行。

--------------------

以下是 Selenium WebDriver API 中涉及的一些常用方法和类:

### 方法(Methods):

1. **find_element(by, value)**:查找页面中第一个符合条件的元素。
2. **find_elements(by, value)**:查找页面中所有符合条件的元素。
3. **get(url)**:访问指定的 URL。
4. **click()**:点击元素。
5. **send_keys(*value)**:向输入框中输入文本。
6. **clear()**:清除输入框中的文本。
7. **submit()**:提交表单。
8. **execute_script(script, *args)**:在页面上执行 JavaScript 脚本。
9. **switch_to.frame(frame_reference)**:切换到指定的 iframe 或 frame。
10. **switch_to.window(window_name)**:切换到指定的窗口。
11. **close()**:关闭当前窗口。
12. **quit()**:关闭浏览器并退出 WebDriver。
13. **get_attribute(name)**:获取元素的指定属性值。
14. **is_displayed()**:判断元素是否可见。
15. **is_enabled()**:判断元素是否可用。
16. **is_selected()**:判断元素是否被选中。
17. **back()**:后退到上一个页面。
18. **forward()**:前进到下一个页面。
19. **refresh()**:刷新当前页面。
20. **save_screenshot(filename)**:保存当前页面截图。
21. **add_cookie(cookie_dict)**:添加 Cookie。
22. **delete_cookie(name)**:删除指定名称的 Cookie。
23. **delete_all_cookies()**:删除所有 Cookie。
24. **get_cookies()**:获取当前页面的所有 Cookie。

### 类(Classes):

1. **WebDriver**:WebDriver 接口,代表了浏览器实例。
2. **WebElement**:WebElement 接口,代表了页面中的一个元素。
3. **By**:By 类,包含了一组用于定位元素的方法。
4. **ActionChains**:ActionChains 类,用于执行各种用户交互操作。
5. **Options**:Options 接口,代表了浏览器的选项和配置。
6. **Keys**:Keys 类,包含了一组用于模拟键盘按键的常量。
7. **Timeouts**:Timeouts 接口,用于设置等待超时时间。
8. **WindowHandles**:WindowHandles 接口,用于管理浏览器窗口。

这些方法和类可以帮助开发人员控制浏览器和操作页面元素,实现自动化测试任务。
--------------------

### 类(Classes)示例介绍:
#### 1. WebDriver:
WebDriver 接口代表了浏览器实例,通过它可以创建浏览器对象并控制浏览器的行为。
from selenium import webdriver
# 创建 Chrome 浏览器实例
driver = webdriver.Chrome()
# 访问网页
driver.get("https://www.example.com")

#### 2. WebElement:
WebElement 接口代表了页面中的一个元素,可以通过定位方式找到元素并进行操作。
from selenium import webdriver
# 创建 Chrome 浏览器实例
driver = webdriver.Chrome()
# 定位并点击按钮元素
button_element = driver.find_element_by_id("button")
button_element.click()

#### 3. By:
By 类包含了一组用于定位元素的方法,常用于在 WebDriver 中查找页面元素。
from selenium import webdriver
from selenium.webdriver.common.by import By
# 创建 Chrome 浏览器实例
driver = webdriver.Chrome()
# 定位并点击按钮元素(使用 By.ID 定位)
button_element = driver.find_element(By.ID, "button")
button_element.click()

#### 4. ActionChains:
ActionChains 类用于执行各种用户交互操作,如鼠标移动、双击、右键点击等。
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
# 创建 Chrome 浏览器实例
driver = webdriver.Chrome()
# 定位元素
element = driver.find_element_by_id("myElement")
# 创建 ActionChains 对象
actions = ActionChains(driver)
# 鼠标移动到元素上
actions.move_to_element(element).perform()

#### 5. Options:
Options 接口代表了浏览器的选项和配置,可以用于设置浏览器的参数。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 创建 Chrome 浏览器选项对象
chrome_options = Options()
# 设置浏览器参数
chrome_options.add_argument("--headless")  # 设置为无头模式
# 创建 Chrome 浏览器实例,并加载选项
driver = webdriver.Chrome(options=chrome_options)
# 访问网页
driver.get("https://www.example.com")

#### 6. Keys:
Keys 类包含了一组用于模拟键盘按键的常量,可以用于模拟键盘操作。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# 创建 Chrome 浏览器实例
driver = webdriver.Chrome()
# 定位输入框并输入文本
input_element = driver.find_element_by_id("myInput")
input_element.send_keys("Hello, World!")
# 模拟键盘按下 Enter 键
input_element.send_keys(Keys.ENTER)

#### 7. Timeouts:
Timeouts 接口用于设置等待超时时间,可以在 WebDriver 中设置隐式等待或显式等待的超时时间。
from selenium import webdriver
# 创建 Chrome 浏览器实例
driver = webdriver.Chrome()
# 设置隐式等待超时时间为10秒
driver.implicitly_wait(10)
# 访问网页
driver.get("https://www.example.com")

#### 8. WindowHandles:
WindowHandles 接口用于管理浏览器窗口,可以获取当前窗口句柄、切换窗口等操作。
from selenium import webdriver
# 创建 Chrome 浏览器实例
driver = webdriver.Chrome()
# 打开新窗口
driver.execute_script("window.open('https://www.example.com', '_blank');")
# 获取所有窗口句柄
window_handles = driver.window_handles
# 切换到第二个窗口
driver.switch_to.window(window_handles[1])
# 关闭当前窗口
driver.close()
*******************
在 Selenium 中,WebDriver 不区分窗口和标签页。如果你的网站打开了一个新的标签页或窗口,Selenium 会通过窗口句柄(window handle)来让你操作它。每个窗口都有一个唯一的标识符,在单个会话中保持持久性。你可以通过以下方法来获取当前窗口的窗口句柄:
current_window_handle = driver.current_window_handle
这将返回当前窗口的窗口句柄,你可以将其用于后续操作,如切换窗口或执行其他操作。

`driver.window_handles` 返回一个包含所有窗口句柄的列表你可以使用这个列表来实现窗口之间的切换或执行其他需要窗口句柄的操作。例如:
# 获取所有窗口句柄列表
handles = driver.window_handles
# 切换到第二个窗口
driver.switch_to.window(handles[1])
这样,你就可以根据需要操作不同的窗口或标签页。
*******************
在 Selenium 4 及更高版本中,你可以使用 `switch_to.new_window()` 方法创建一个新的窗口或标签页。
以下是如何使用 Python 打开一个新标签页并切换到它的示例:
from selenium import webdriver
# 创建 Chrome 驱动程序的实例
driver = webdriver.Chrome()
# 打开一个新标签页并切换到它
driver.switch_to.new_window('tab')

类似地,你可以使用以下代码打开一个新窗口并切换到它:
from selenium import webdriver
# 创建 Chrome 驱动程序的实例
driver = webdriver.Chrome()
# 打开一个新窗口并切换到它
driver.switch_to.new_window('window')
这些方法将创建一个新的窗口或标签页,并自动在屏幕上切换焦点到它,无需使用 `switch_to.window()` 方法显式切换到它。

-------------------
`selenium.webdriver` 模块是 Selenium Python 客户端库中的一个重要模块,它包含了 WebDriver 的实现以及各种与浏览器交互相关的类和方法。以下是一些常见的在 `selenium.webdriver` 模块中使用的类和方法:
1. **`webdriver` 模块下的浏览器实现类**:
   - `Chrome`: Chrome 浏览器的实现类。
   - `Firefox`: Firefox 浏览器的实现类。
   - `Edge`: Edge 浏览器的实现类。
   - 其他如 `Opera`、`Safari` 等。
2. **`webdriver.common.keys` 模块**:
   - `Keys`: 包含了模拟键盘按键的常量,用于发送键盘输入。
3. **`webdriver.common.by` 模块**:
   - `By`: 包含了一组用于定位元素的方法,如 ID、Class Name、XPath 等。
4. **`webdriver.support` 模块**:
   - `expected_conditions`: 包含了一组用于设置显式等待条件的类和方法,如元素可见、存在、可点击等条件。
5. **`webdriver.support.ui` 模块**:
   - `WebDriverWait`: 用于设置显式等待的类,结合 `expected_conditions` 中的条件来等待元素的出现。
通过 `selenium.webdriver` 模块,可以方便地创建不同浏览器的 WebDriver 实例,并进行各种操作,如访问 URL、查找元素、执行 JavaScript 等。同时,也可以结合其他模块如 `selenium.webdriver.common.keys` 和 `selenium.webdriver.support.ui` 来实现更复杂的操作和等待机制。 

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome()try:# 打开网页driver.get("https://www.hao123.com/")# 获取页面中所有input元素input_elements = driver.find_elements(By.TAG_NAME, "input")# 输出所有的input元素for input_element in input_elements:print(input_element.get_attribute("outerHTML"))# 查找搜索框search_input = driver.find_element(By.CSS_SELECTOR, 'input[data-hook="searchInput"]')# 输入搜索词search_input.send_keys("Selenium库")# 查找搜索按钮并点击search_button = driver.find_element(By.CSS_SELECTOR, 'input[data-hook="searchSubmit"]')search_button.click()# 处理新窗口,WebDriver不知道哪个窗口处于活动状态的。使用新窗口 您将需要切换到它。handles = driver.window_handlesif len(handles) > 1:driver.switch_to.window(handles[1])  # 切换到新打开的窗口# 在这里可以添加等待搜索结果加载完成的逻辑time.sleep(8)  # 等待5秒钟finally:# 关闭浏览器driver.quit()
from selenium import webdriver# 创建 Chrome 浏览器实例,并设置隐式等待时间为10秒
driver = webdriver.Chrome()
driver.implicitly_wait(10)# 后续的元素查找操作会等待最多10秒
element = driver.find_element_by_id("myElement")
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC# 创建 Chrome 浏览器实例
driver = webdriver.Chrome()# 显式等待,等待10秒直到元素可见
element = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, "myElement"))
)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/733728.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++学习随笔(1)——初识篇

前面一章我们简单介绍了一下C与C语言之间的关系,本章就让我们来正式入门学习一下C吧! 目录 1.第一个C程序 2.头文件 (1)简介 (2)常见的头文件: 2. 命名空间 2.1 命名空间定义 2.2 命名空…

leetcode 热题 100_搜索二维矩阵

题解一: 二叉搜索树:从矩阵右上角观察,结构类似二叉搜索树,因此可以用类似的解法来做。具体做法是双指针从右上角开始,向左下角逐步搜索,如果当前值比目标值大,则向下移动,如果当前值…

了解 HTTPS 中间人攻击:保护你的网络安全

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

mybatis-plus整合spring boot极速入门

使用mybatis-plus整合spring boot,接下来我来操作一番。 一,创建spring boot工程 勾选下面的选项 紧接着,还有springboot和依赖我们需要选。 这样我们就创建好了我们的spring boot,项目。 简化目录结构: 我们发现&a…

Qt 实现诈金花的牌面值分析工具

诈金花是很多男人最爱的卡牌游戏 , 每当你拿到三张牌的时候, 生活重新充满了期待和鸟语花香. 那么我们如果判断手中的牌在所有可能出现的牌中占据的百分比位置呢. 这是最终效果: 这是更多的结果: 在此做些简单的说明: 炸弹(有些地方叫豹子) > 同花顺 > 同花 > 顺…

Day27:安全开发-PHP应用TP框架路由访问对象操作内置过滤绕过核心漏洞

目录 TP框架-开发-配置架构&路由&MVC模型 TP框架-安全-不安全写法&版本过滤绕过 思维导图 PHP知识点 功能:新闻列表,会员中心,资源下载,留言版,后台模块,模版引用,框架开发等 技…

安卓提示风险解决源码搭建教程

一.环境 1.安装Nginx 2.安装Tomcat8.5 3. 安装Mysql5.7 二.修改app已生成的文件下载地址 1.打开编辑config.properties 2.填写你的ip,端口不用修改 三.启动教程 启动命令:sh.start.sh 源码下载链接:https://p…

计算机网络 IP多播的概念

多播是让源主机一次发送的单个分组可以抵达用一个组地址表示的若干目的地址,即,一对多的通信。在互联网上进行的多播,称为IP多播。 与单播相比,在一对多的通信中,多播可以大大节约网络资源。 IP多播地址,…

ArrayDeque集合源码分析

ArrayDeque集合源码分析 文章目录 ArrayDeque集合源码分析一、字段分析二、构造函数分析方法、方法分析四、总结 实现了 Deque,说面该数据结构一定是个双端队列,我们知道 LinkedList 也是双端队列,并且是用双向链表 存储结构的。而 ArrayDequ…

【今日面经】24/3/9 广州Java某小厂电话面经

面经来源:https://www.nowcoder.com/?type818_1 目录 1、 和equals()有什么区别?2、String变量直接赋值和构造函数赋值比较相等吗?3、String一些方法?4、抽象类和接口有什么区别?5、Java容器有哪些?6、Lis…

Spring MVC | Spring MVC 的“核心类” 和 “注解”

目录: Spring MVC 的“核心类” 和 “注解” :1.DispatcherServlet (前端控制器)2.Controller 注解3.RequestMapping 注解3.1 RequestMapping 注解的 “使用”标注在 “方法” 上标注在 “类” 上 3.2 RequestMapping 注解的 “属性” 4.组合注解4.1 请求处理方法的…

哪些狗粮比较适合幼年犬?

亲爱的朋友👋,你为家中的幼年犬挑选狗粮可真是个贴心的主人呢!选择适合幼年犬的狗粮,确实是个需要仔细考虑的问题。幼年犬处于生长发育的关键期,所以狗粮的营养成分和口感都非常重要。 🐶 在选择狗粮时&…

排序算法全景:从基础到高级的Java实现

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

CentOS系统上安装Redis操作教程

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

【Python+Selenium学习系列4】Selenium常用的方法

目录 一、前言 二、基本方法 1、send_keys方法---模拟键盘输入 1.1 源代码 1.2 运行结果 2、text方法---用于获取文本值 2.1 源代码 2.2 运行结果 3、get_attribute()方法---用于获取属性值 ​3.1 源代码 3.2 运行结果 ​4、maximize_window()方法---实现浏览器窗口…

Pulsar 社区周报 | No.2024.03.08 Pulsar-Spark Connector 助力实时计算

关于 Apache Pulsar Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制&#xff0c…

每日一练:LeeCode-209、长度最小的子数组【滑动窗口+双指针】

每日一练:LeeCode-209、长度最小的子数组【滑动窗口双指针】 思路暴⼒解法滑动窗口 本文是力扣 每日一练:LeeCode-209、长度最小的子数组【滑动窗口双指针】 学习与理解过程,本文仅做学习之用,对本题感兴趣的小伙伴可以出门左拐 L…

开发指南002-前后端信息交互规范-返回类ResponseResult

返回类有两个&#xff0c;一般返回类ResponseResult和分页返回类PageResult&#xff0c;本篇介绍ResponseResult public class ResponseResult<T> implements Serializable{Schema(description "平台-返回结构类型 表明是千里马架构返回体")private String f…

基于php的用户登录实现(v2版)(持续迭代)

目录 版本说明 数据库连接 登录页面&#xff1a;login.html 登录处理实现&#xff1a;login.php 用户欢迎页面&#xff1a;welcome.php 密码修改页面&#xff1a;change_password.html 修改执行&#xff1a;change_password.php 用户注册页面&#xff1a;register.html …

远程连接Linux系统

图形化、命令行 对于操作系统的使用&#xff0c;有2种使用形式&#xff1a; 图形化页面使用操作系统 图形化&#xff1a;使用操作系统提供的图形化页面&#xff0c;以获得图形化反馈的形式去使用操作系统。 以命令的形式使用操作系统 命令行&#xff1a;使用操作系统提供的各…