当前位置: 首页 > news >正文

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原文档&#xff1a;https://github.com/riscv/riscv-aclint/blob/main/riscv-aclint.adoc 在这里进行了翻译以及校对&#xff0c;仅供参考&#xff0c;不正确的地方欢迎指出 1、介绍 【此 RISC-V ACLINT 规范定义了一组内存映射设备&#xff0c;这…...

grafana table合并查询

注&#xff1a;本文基于Grafana v9.2.8编写 1 问题 默认情况下table展示的是一个查询返回的多个field&#xff0c;但是我想要的数据在不同的metric上&#xff0c;比如我需要显示某个pod的读写IO&#xff0c;但是读和写这两个指标存在于两个不同的metirc&#xff0c;需要分别查…...

编程笔记 html5cssjs 007 文章排版 颜真卿《述张长史笔法十二意》

编程笔记 html5&css&js 007 文章排版 颜真卿《述张长史笔法十二意》 一、代码二、解释 这段代码定义了一个古文展示页面的结构和样式&#xff0c;同时本文内容也是书法爱好者的珍贵资料。 一、代码 <!DOCTYPE html> <html lang"zh-CN"> <hea…...

Yolov8模型用torch_pruning剪枝

目录 &#x1f680;&#x1f680;&#x1f680;订阅专栏&#xff0c;更新及时查看不迷路&#x1f680;&#x1f680;&#x1f680; 原理 遍历所有分组 高级剪枝器 &#x1f680;&#x1f680;&#x1f680;订阅专栏&#xff0c;更新及时查看不迷路&#x1f680;&#x1f680…...

C++字符串操作【超详细】

零.前言 本文将重点围绕C的字符串来展开描述。 其中&#xff0c;对于C/C中字符串的一些区别也做出了回答&#xff0c;并对于C的&#xff08;string库&#xff09;进行了讲解&#xff0c;最后我们给出字符串的不同表达形式。 开发环境&#xff1a; VS2022 一.字符串常量跟字…...

Ps:画笔工具

画笔工具 Brush Tool是 Photoshop 中最常用的工具&#xff0c;可广泛地用于绘画与修饰工作之中。 快捷键&#xff1a;B ◆ ◆ ◆ 常用操作方法与技巧 1、熟练掌握画笔工具的操作对于使用其他工具也非常有益&#xff0c;因为 Photoshop 中许多与笔刷相关的工具有类似的选项和操…...

【鸿蒙 HarmonyOS 4.0】弹性布局(Flex)

一、介绍 弹性布局&#xff08;Flex&#xff09;提供更加有效的方式对容器中的子元素进行排列、对齐和分配剩余空间。容器默认存在主轴与交叉轴&#xff0c;子元素默认沿主轴排列&#xff0c;子元素在主轴方向的尺寸称为主轴尺寸&#xff0c;在交叉轴方向的尺寸称为交叉轴尺寸…...

Java 客户端向服务端上传文件(TCP通信)

一、实验内容 编写一个客户端向服务端上传文件的程序&#xff0c;要求使用TCP通信的的知识&#xff0c;完成将本地机器输入的路径下的文件上传到D盘中名称为upload的文件夹中。并把客户端的IP地址加上count标识作为上传后文件的文件名&#xff0c;即IP&#xff08;count&#…...

问题:前端获取long型数值精度丢失,后面几位都为0

文章目录 问题分析解决 问题 通过接口获取到的数据和 Postman 获取到的数据不一样&#xff0c;仔细看 data 的第17位之后 分析 该字段类型是long类型问题&#xff1a;前端接收到数据后&#xff0c;发现精度丢失&#xff0c;当返回的结果超过17位的时候&#xff0c;后面的全…...

Day26:安全开发-PHP应用模版引用Smarty渲染MVC模型数据联动RCE安全

目录 新闻列表 自写模版引用 Smarty模版引用 代码RCE安全测试 思维导图 PHP知识点&#xff1a; 功能&#xff1a;新闻列表&#xff0c;会员中心&#xff0c;资源下载&#xff0c;留言版&#xff0c;后台模块&#xff0c;模版引用&#xff0c;框架开发等 技术&#xff1a;输…...

LVS集群(Linux Virtual server)介绍----及LVS的NAT模式部署(一)

群集的含义 ●Cluster&#xff0c;集群、群集由多台主机构成&#xff0c;但对外只表现为一个整体&#xff0c;只提供访问入口(域名或IP地址)&#xff0c;相当于一台大型计算机 问题&#xff1a; 互联网应用中&#xff0c;随着站点对硬件性能、响应速度、服务稳定性、数据可靠…...

海外媒体宣发套餐如何利用3种方式洞察市场-华媒舍

在当今数字化时代&#xff0c;媒体宣发成为了企业推广产品和品牌的重要手段之一。其中&#xff0c;7FT媒体宣发套餐是一种常用而有效的宣传方式。本文将介绍这种媒体宣发套餐&#xff0c;以及如何利用它来洞察市场。 一、关键概念 在深入讨论7FT媒体宣发套餐之前&#xff0c;让…...

开发知识点-Apache Struts2框架

Apache Struts2 介绍S2-001S2CVE-2023-22530 介绍 Apache Struts2是一个基于MVC&#xff08;模型-视图-控制器&#xff09;设计模式的Web应用程序框架&#xff0c;它是Apache旗下的一个开源项目&#xff0c;并且是Struts1的下一代产品。Struts2是在Struts1和WebWork的技术基础…...

【Spring高级】第3讲 Bean的生命周期

目录 基本的生命周期后处理器总结 基本的生命周期 为了演示生命周期的过程&#xff0c;我们直接使用 SpringApplication.run()方法&#xff0c;他会直接诶返回一个容器对象。 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协议栈中的一部分&#xff0c;其基本作用是发送数据包到网络。这个函数会根据不同情况推进发送队列的头部&#xff0c;确保只要远程窗口有空间&#xff0c;就可以发送数据。 下面是对该函数的一些主要逻辑的中…...

opencv实现视频人脸识别

一. 实现指定图像的人脸识别 注意&#xff1a; 以下实例参考《OpenCV轻松入门面向Python》李立宗著&#xff0c;使用python语言&#xff0c;编辑器为PyCharm&#xff0c;且都运行成功。 1.dface3.jpg图片文件和当前代码放在同一级目录下。 2.级联分类器文件和当前代码文件放在…...

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

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

日期问题---算法精讲

前言 今天讲讲日期问题&#xff0c;所谓日期问题&#xff0c;在蓝桥杯中出现众多&#xff0c;但是解法比较固定。 一般有判断日期合法性&#xff0c;判断是否闰年&#xff0c;判断日期的特殊形式&#xff08;回文或abababab型等&#xff09; 目录 例题 题2 题三 总结 …...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...