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"))
)
相关文章:
Selenium WebDriver API 中涉及的一些常用方法和类
Selenium WebDriver API 是 Selenium 提供的一组方法和类,用于控制浏览器和操作 Web 元素。这些 API 提供了丰富的功能,包括但不限于: 1. **查找元素**:通过不同的定位方式(如ID、Class Name、XPath等)在页…...
OJ_复数集合
题干 C实现 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <queue> #include <string> using namespace std;struct Complex {int re;int im;//构造函数Complex(int _re, int _im) {//注意参数名字必须不同re _re;im _im;} };//结构体不支…...
【学一点RISC-V】ACLINT(高级核心本地中断控制器)文档
RISCV架构 ACLINT文档 ACLINT原文档:https://github.com/riscv/riscv-aclint/blob/main/riscv-aclint.adoc 在这里进行了翻译以及校对,仅供参考,不正确的地方欢迎指出 1、介绍 【此 RISC-V ACLINT 规范定义了一组内存映射设备,这…...
grafana table合并查询
注:本文基于Grafana v9.2.8编写 1 问题 默认情况下table展示的是一个查询返回的多个field,但是我想要的数据在不同的metric上,比如我需要显示某个pod的读写IO,但是读和写这两个指标存在于两个不同的metirc,需要分别查…...
编程笔记 html5cssjs 007 文章排版 颜真卿《述张长史笔法十二意》
编程笔记 html5&css&js 007 文章排版 颜真卿《述张长史笔法十二意》 一、代码二、解释 这段代码定义了一个古文展示页面的结构和样式,同时本文内容也是书法爱好者的珍贵资料。 一、代码 <!DOCTYPE html> <html lang"zh-CN"> <hea…...
Yolov8模型用torch_pruning剪枝
目录 🚀🚀🚀订阅专栏,更新及时查看不迷路🚀🚀🚀 原理 遍历所有分组 高级剪枝器 🚀🚀🚀订阅专栏,更新及时查看不迷路🚀🚀…...
C++字符串操作【超详细】
零.前言 本文将重点围绕C的字符串来展开描述。 其中,对于C/C中字符串的一些区别也做出了回答,并对于C的(string库)进行了讲解,最后我们给出字符串的不同表达形式。 开发环境: VS2022 一.字符串常量跟字…...
Ps:画笔工具
画笔工具 Brush Tool是 Photoshop 中最常用的工具,可广泛地用于绘画与修饰工作之中。 快捷键:B ◆ ◆ ◆ 常用操作方法与技巧 1、熟练掌握画笔工具的操作对于使用其他工具也非常有益,因为 Photoshop 中许多与笔刷相关的工具有类似的选项和操…...
【鸿蒙 HarmonyOS 4.0】弹性布局(Flex)
一、介绍 弹性布局(Flex)提供更加有效的方式对容器中的子元素进行排列、对齐和分配剩余空间。容器默认存在主轴与交叉轴,子元素默认沿主轴排列,子元素在主轴方向的尺寸称为主轴尺寸,在交叉轴方向的尺寸称为交叉轴尺寸…...
Java 客户端向服务端上传文件(TCP通信)
一、实验内容 编写一个客户端向服务端上传文件的程序,要求使用TCP通信的的知识,完成将本地机器输入的路径下的文件上传到D盘中名称为upload的文件夹中。并把客户端的IP地址加上count标识作为上传后文件的文件名,即IP(count&#…...
问题:前端获取long型数值精度丢失,后面几位都为0
文章目录 问题分析解决 问题 通过接口获取到的数据和 Postman 获取到的数据不一样,仔细看 data 的第17位之后 分析 该字段类型是long类型问题:前端接收到数据后,发现精度丢失,当返回的结果超过17位的时候,后面的全…...
Day26:安全开发-PHP应用模版引用Smarty渲染MVC模型数据联动RCE安全
目录 新闻列表 自写模版引用 Smarty模版引用 代码RCE安全测试 思维导图 PHP知识点: 功能:新闻列表,会员中心,资源下载,留言版,后台模块,模版引用,框架开发等 技术:输…...
LVS集群(Linux Virtual server)介绍----及LVS的NAT模式部署(一)
群集的含义 ●Cluster,集群、群集由多台主机构成,但对外只表现为一个整体,只提供访问入口(域名或IP地址),相当于一台大型计算机 问题: 互联网应用中,随着站点对硬件性能、响应速度、服务稳定性、数据可靠…...
海外媒体宣发套餐如何利用3种方式洞察市场-华媒舍
在当今数字化时代,媒体宣发成为了企业推广产品和品牌的重要手段之一。其中,7FT媒体宣发套餐是一种常用而有效的宣传方式。本文将介绍这种媒体宣发套餐,以及如何利用它来洞察市场。 一、关键概念 在深入讨论7FT媒体宣发套餐之前,让…...
开发知识点-Apache Struts2框架
Apache Struts2 介绍S2-001S2CVE-2023-22530 介绍 Apache Struts2是一个基于MVC(模型-视图-控制器)设计模式的Web应用程序框架,它是Apache旗下的一个开源项目,并且是Struts1的下一代产品。Struts2是在Struts1和WebWork的技术基础…...
【Spring高级】第3讲 Bean的生命周期
目录 基本的生命周期后处理器总结 基本的生命周期 为了演示生命周期的过程,我们直接使用 SpringApplication.run()方法,他会直接诶返回一个容器对象。 import org.springframework.boot.SpringApplication; import org.springframework.context.Config…...
【C语言】linux内核tcp_write_xmit和tcp_write_queue_purge
tcp_write_xmit 一、讲解 这个函数 tcp_write_xmit 是Linux内核TCP协议栈中的一部分,其基本作用是发送数据包到网络。这个函数会根据不同情况推进发送队列的头部,确保只要远程窗口有空间,就可以发送数据。 下面是对该函数的一些主要逻辑的中…...
opencv实现视频人脸识别
一. 实现指定图像的人脸识别 注意: 以下实例参考《OpenCV轻松入门面向Python》李立宗著,使用python语言,编辑器为PyCharm,且都运行成功。 1.dface3.jpg图片文件和当前代码放在同一级目录下。 2.级联分类器文件和当前代码文件放在…...
【今日面经】24/3/9 广州Java某小厂电话面经
面经来源:https://www.nowcoder.com/?type818_1 目录 1、 和equals()有什么区别?2、String变量直接赋值和构造函数赋值比较相等吗?3、String一些方法?4、抽象类和接口有什么区别?5、Java容器有哪些?6、Lis…...
日期问题---算法精讲
前言 今天讲讲日期问题,所谓日期问题,在蓝桥杯中出现众多,但是解法比较固定。 一般有判断日期合法性,判断是否闰年,判断日期的特殊形式(回文或abababab型等) 目录 例题 题2 题三 总结 …...
保姆级教程:从驱动到IDE,搞定MaixBit开发环境(附固件选择避坑指南)
保姆级教程:从驱动到IDE,搞定MaixBit开发环境(附固件选择避坑指南) 刚拿到MaixBit开发板的新手们,面对嵌入式AI开发可能会感到无从下手。别担心,这篇教程将带你从零开始,一步步完成开发环境的搭…...
智能缝纫机与无人缝纫生产线行业研究报告 -以泉州誉财自动化为例
引言随着“中国制造2025”战略和全球工业4.0浪潮的持续推进,制造业正经历着从“汗水驱动”向“智慧驱动”的深刻变革。纺织服装行业作为中国制造业的重要支柱,长期以来依赖大量熟练工人,面临着劳动力成本上升、用工荒、生产效率瓶颈等多重挑战。智能缝纫机与无人缝纫生产线的兴…...
激活函数避坑指南:从‘死ReLU’到梯度消失,你的模型不收敛可能就因为这步没配好(附PyTorch调试技巧)
激活函数避坑指南:从‘死ReLU’到梯度消失,你的模型不收敛可能就因为这步没配好(附PyTorch调试技巧) 当你的神经网络模型在训练过程中出现loss不降、精度震荡或完全无法收敛时,第一个需要检查的就是激活函数的选择与配…...
终极免费PCB查看器:3分钟掌握OpenBoardView电路板分析技巧
终极免费PCB查看器:3分钟掌握OpenBoardView电路板分析技巧 【免费下载链接】OpenBoardView View .brd files 项目地址: https://gitcode.com/gh_mirrors/op/OpenBoardView 还在为复杂的.brd文件头疼吗?面对密密麻麻的电路板元件不知所措ÿ…...
从PyTorch到TensorRT Engine:动态Batch模型转换的完整避坑指南(含trtexec命令详解)
从PyTorch到TensorRT Engine:动态Batch模型转换的完整避坑指南(含trtexec命令详解) 在深度学习模型部署的实践中,动态Batch支持一直是工程落地的关键需求。想象一下这样的场景:你的PyTorch模型在训练时表现优异&#x…...
Android Studio中文界面终极配置指南:3分钟搞定你的开发环境汉化
Android Studio中文界面终极配置指南:3分钟搞定你的开发环境汉化 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 还在…...
东西方文明:不同的三位一体
东西方文明底层思维模式体现了两种认识世界的不同路径:一种是分析性的三足鼎立,另一种是整体性的三位一体。🧐 西方:神学、哲学、科学的“三足鼎立”在西方文明的发展脉络中,神学、哲学与科学逐渐分化,形成…...
群晖NAS的osheet文件打不开?用Python写个脚本,5分钟批量转成Excel
群晖NAS的osheet文件打不开?用Python写个脚本,5分钟批量转成Excel 如果你是一位群晖NAS用户,可能会遇到这样的困扰:通过Drive同步到本地的表格文件,扩展名变成了.osheet,用Office或WPS打开时一片空白。这种…...
艾尔登法环存档复制器:三步安全迁移游戏角色的终极指南
艾尔登法环存档复制器:三步安全迁移游戏角色的终极指南 【免费下载链接】EldenRingSaveCopier 项目地址: https://gitcode.com/gh_mirrors/el/EldenRingSaveCopier 艾尔登法环存档复制器(EldenRingSaveCopier)是一款专为《艾尔登法环…...
bert-base-chinese效果展示:中文语义理解能力的实际案例分享
bert-base-chinese效果展示:中文语义理解能力的实际案例分享 1. 模型核心能力概览 bert-base-chinese作为中文NLP领域的基石模型,展现了令人惊艳的语义理解能力。这个由Google发布的预训练模型,专门针对中文语言特性进行了优化,…...
