selenium 常用API

2023-05-16

Selenium 常用API 之操作浏览器

上文我们讲解了如何打开浏览器,本文讲讲解关于操作浏览器的更多API


后退

# 后退
driver.back()

前进

driver.forward()

刷新

driver.refresh()

Alerts 警告框

# Click the link to activate the alert
driver.find_element(By.LINK_TEXT, "See an example alert").click()

# Wait for the alert to be displayed and store it in a variable
alert = wait.until(expected_conditions.alert_is_present())

# Store the alert text in a variable
text = alert.text

# Press the OK button
alert.accept()
  

Confirm 确认框

# Click the link to activate the alert
driver.find_element(By.LINK_TEXT, "See a sample confirm").click()

# Wait for the alert to be displayed
wait.until(expected_conditions.alert_is_present())

# Store the alert in a variable for reuse
alert = driver.switch_to.alert

# Store the alert text in a variable
text = alert.text

# Press the Cancel button
alert.dismiss()
  

添加 Cookie

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("http://www.example.com")

# Adds the cookie into current browser context
driver.add_cookie({"name": "key", "value": "value"})
  

获取命名的 Cookie

from selenium import webdriver

driver = webdriver.Chrome()

# Navigate to url
driver.get("http://www.example.com")

# Adds the cookie into current browser context
driver.add_cookie({"name": "foo", "value": "bar"})

# Get cookie details with named cookie 'foo'
print(driver.get_cookie("foo"))
  

iFrames和frames

使用 WebElement

    # 存储网页元素
iframe = driver.find_element(By.CSS_SELECTOR, "#modal > iframe")

    # 切换到选择的 iframe
driver.switch_to.frame(iframe)

    # 单击按钮
driver.find_element(By.TAG_NAME, 'button').click()

使用 name 或 id

   # 通过 id 切换框架
driver.switch_to.frame('buttonframe')

    # 单击按钮
driver.find_element(By.TAG_NAME, 'button').click()

使用索引

    # 基于索引切换到第 2 个 iframe
iframe = driver.find_elements(By.TAG_NAME,'iframe')[1]

    # 切换到选择的 iframe
driver.switch_to.frame(iframe)

离开框架

    # 切回到默认内容
driver.switch_to.default_content()

窗口和标签页

WebDriver 没有区分窗口和标签页。如果你的站点打开了一个新标签页或窗口,Selenium 将允许您使用窗口句柄来处理它。 每个窗口都有一个唯一的标识符,该标识符在单个会话中保持持久性。你可以使用以下方法获得当前窗口的窗口句柄:

driver.current_window_handle

切换窗口或标签页

单击在 <a href=“https://seleniumhq.github.io"target="_blank”>新窗口 中打开链接, 则屏幕会聚焦在新窗口或新标签页上,但 WebDriver 不知道操作系统认为哪个窗口是活动的。 要使用新窗口,您需要切换到它。 如果只有两个选项卡或窗口被打开,并且你知道从哪个窗口开始, 则你可以遍历 WebDriver, 通过排除法可以看到两个窗口或选项卡,然后切换到你需要的窗口或选项卡。

不过,Selenium 4 提供了一个新的 api NewWindow 它创建一个新选项卡 (或) 新窗口并自动切换到它。

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

    # 启动驱动程序
with webdriver.Firefox() as driver:
    # 打开网址
driver.get("https://seleniumhq.github.io")

    # 设置等待
    wait = WebDriverWait(driver, 10)

    # 存储原始窗口的 ID
    original_window = driver.current_window_handle

    # 检查一下,我们还没有打开其他的窗口
    assert len(driver.window_handles) == 1

    # 单击在新窗口中打开的链接
    driver.find_element(By.LINK_TEXT, "new window").click()

    # 等待新窗口或标签页
    wait.until(EC.number_of_windows_to_be(2))

    # 循环执行,直到找到一个新的窗口句柄
    for window_handle in driver.window_handles:
        if window_handle != original_window:
            driver.switch_to.window(window_handle)
            break

    # 等待新标签页完成加载内容
    wait.until(EC.title_is("SeleniumHQ Browser Automation"))

创建新窗口(或)新标签页并且切换

创建一个新窗口 (或) 标签页,屏幕焦点将聚焦在新窗口或标签在上。您不需要切换到新窗口 (或) 标签页。如果除了新窗口之外, 您打开了两个以上的窗口 (或) 标签页,您可以通过遍历 WebDriver 看到两个窗口或选项卡,并切换到非原始窗口。

    # 打开新标签页并切换到新标签页
driver.switch_to.new_window('tab')

    # 打开一个新窗口并切换到新窗口
driver.switch_to.new_window('window')

关闭窗口或标签页

当你完成了一个窗口或标签页的工作时,_并且_它不是浏览器中最后一个打开的窗口或标签页时,你应该关闭它并切换回你之前使用的窗口。 假设您遵循了前一节中的代码示例,您将把前一个窗口句柄存储在一个变量中。把这些放在一起,你会得到:

    #关闭标签页或窗口
driver.close()

    #切回到之前的标签页或窗口
driver.switch_to.window(original_window)

如果在关闭一个窗口后忘记切换回另一个窗口句柄,WebDriver 将在当前关闭的页面上执行,并触发一个 No Such Window Exception 无此窗口异常。必须切换回有效的窗口句柄才能继续执行

在会话结束时退出浏览器

driver.quit()
  • 退出将会
    • 关闭所有与 WebDriver 会话相关的窗口和选项卡
    • 结束浏览器进程
    • 结束后台驱动进程
    • 通知 Selenium Grid 浏览器不再使用,以便可以由另一个会话使用它(如果您正在使用 Selenium Grid)

调用 quit() 失败将留下额外的后台进程和端口运行在机器上,这可能在以后导致一些问题。

有的测试框架提供了一些方法和注释,您可以在测试结束时放入 teardown() 方法中。

获取窗口大小

获取浏览器窗口的大小(以像素为单位)。

    # 分别获取每个尺寸
width = driver.get_window_size().get("width")
height = driver.get_window_size().get("height")

    # 或者存储尺寸并在以后查询它们
size = driver.get_window_size()
width1 = size.get("width")
height1 = size.get("height")

设置窗口大小

driver.set_window_size(1024, 768)

得到窗口的位置

    # 分别获取每个尺寸
x = driver.get_window_position().get('x')
y = driver.get_window_position().get('y')

    # 或者存储尺寸并在以后查询它们
position = driver.get_window_position()
x1 = position.get('x')
y1 = position.get('y')

设置窗口位置

    # 将窗口移动到主显示器的左上角
driver.set_window_position(0, 0)

最大化窗口

扩大窗口。对于大多数操作系统,窗口将填满屏幕,而不会阻挡操作系统自己的菜单和工具栏。

driver.maximize_window()

最小化窗口

最小化当前浏览上下文的窗口. 这种命令的精准行为将作用于各个特定的窗口管理器.

最小化窗口通常将窗口隐藏在系统托盘中.

注意: 此功能适用于Selenium 4以及更高版本.

driver.minimize_window()

全屏窗口

填充整个屏幕,类似于在大多数浏览器中按下 F11。

driver.fullscreen_window()

屏幕截图

用于捕获当前浏览上下文的屏幕截图. WebDriver端点 屏幕截图 返回以Base64格式编码的屏幕截图.

from selenium import webdriver

driver = webdriver.Chrome()

    # Navigate to url
driver.get("http://www.example.com")

    # Returns and base64 encoded string into image
driver.save_screenshot('./image.png')

driver.quit()

元素屏幕截图

用于捕获当前浏览上下文的元素的屏幕截图. WebDriver端点 屏幕截图 返回以Base64格式编码的屏幕截图.

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

    # Navigate to url
driver.get("http://www.example.com")

ele = driver.find_element(By.CSS_SELECTOR, 'h1')

    # Returns and base64 encoded string into image
ele.screenshot('./image.png')

driver.quit()

执行脚本

在当前frame或者窗口的上下文中,执行JavaScript代码片段.

    # Stores the header element
header = driver.find_element(By.CSS_SELECTOR, "h1")

    # Executing JavaScript to capture innerText of header element
driver.execute_script('return arguments[0].innerText', header)

打印页面

打印当前浏览器内的页面

注意: 此功能需要无头模式下的Chromium浏览器

from selenium.webdriver.common.print_page_options import PrintOptions

    print_options = PrintOptions()
    print_options.page_ranges = ['1-2']

    driver.get("printPage.html")

    base64code = driver.print_page(print_options)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

selenium 常用API 的相关文章

  • 如何使用.net更改selenium中的用户代理

    我想使用不同的代理 iPhone iPad Android 测试用 NET 编写的 Web 应用程序 我使用 NUnit 和 Selenium 进行测试 有人有一个用 c 或 VB 在 Selenium 中更改代理 例如 iPad 或 iP
  • 如何使用php api检查电子邮件或手机paypal帐户状态?

    如何使用 php api 检查电子邮件或手机 Paypal 帐户状态 好的 如果我想汇款到此电子邮件贝宝 email protected cdn cgi l email protection 或手机 1234567890 汇款前 我可以检查
  • 发送 Microsoft Graph 请求事件返回 400

    我能够通过将 JSON 请求发布到https graph microsoft com v1 0 me calendar events https graph microsoft com v1 0 me calendar events 我已经
  • 使用 PHP 将表单数据发送/发布到 URL [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一个通过 POST 提交的表单 提交表单后我捕获变量 如何连接表单数据 然后将其 POST 到 url 然后重新定向到感谢页面 这不是确
  • 如何检查当前日期并移至下一个日期

    我遇到了一个我似乎无法理解的 python 问题 不确定是否需要使用 if 语句 但因为我是 python 新手 所以我实际上不确定如何编写这个小问题 事实上 这就是我遇到的问题 对于出发日历 我希望 python 能够执行以下操作 查看
  • 通过API更新Twitter背景

    我在通过 Twitter 的 API 更新背景时遇到了一些问题 target url http www google com logos 11th birthday gif ch curl init curl setopt ch CURLO
  • API Gateway POST 方法在测试期间工作,但不适用于邮递员

    我会尽力清楚地解释我的问题 我有一个 API 它使用 Node js 编写的 lambda 函数在 DynamoDB 中编写一些内容 当我在 AWS 控制台中调用它时 API 按预期工作 我发送这样的正文 user id 4dz545zd
  • 如何在 NodeJS 中允许表单数据

    我最近创建了一个接受文件的 API 我正在尝试使用 Postman 测试 API 如果我使用发出帖子请求x wwww form urlencoded身体类型 一切正常 我得到了所有预期的数据 唯一的问题是它不允许发送文件 如果我使用form
  • Selenium:从文件系统拖放到 WebDriver?

    我必须测试一个网络应用程序 其中包含一个用于从本地文件系统上传文件的拖放区域 我的测试环境是基于C 的 对于自动化测试 我使用了 Selenium 但无法从文件系统中拖动文件 上传区域是div标签 无input标签 那么最好的方法是什么 A
  • XML-RPC 与 REST

    我打算在这里构建一个小型服务器 并想为其创建一个 API 我正在决定什么是更好的并且已经排除了SOAP因为在我看来那件事是一团糟 我只剩下REST and XML RPC 我真的很喜欢XML RPC 它实现起来非常简单 并且足够常规 所有客
  • 如何将 chromedriver 与 selenium webdriver 代理一起使用?

    我们的网络环境使用代理服务器连接到外部互联网 在IE gt Internet选项 gt 连接 gt LAN设置中配置 例如 10 212 20 11 8080 现在 我在 chrome 和 IE 上使用 selenium webdriver
  • 使用 Python 打开新窗口时,selenium window_handles 不正确

    我想使用 selenium 和 Python 在一个浏览器中打开多个选项卡 并通过多个选项卡同时抓取实时投注赔率 网站主页生成游戏列表 但是 除非您找到游戏元素并使用 click 该网站是 ajax 密集型 否则无法获取游戏链接 这会在同一
  • java.net.SocketException:Selenium driver.close() 或 driver.quit() 语句上的连接重置

    我看到一个java net SocketException 连接重置几乎每次我使用 driver close 或 driver quit 语句时 浏览器确实关闭了 并且到目前为止 该异常并未影响我的任何测试 但我仍然想了解为什么会发生这种情
  • Selenium Webdriver - Firefox 中元素不可点击错误

    通常在 Chrome 驱动程序中出现的元素不可点击错误也恰好在 Firefox 中出现 显示的错误消息 Exception in thread main org openqa selenium WebDriverException Elem
  • 无法在 Angular 10 中的“pdf-viewer”=>“ng2-pdf-viewer”中显示 blob url

    我有一个 API 它将上传的文件作为 blob 返回 当我尝试绑定时src如果使用 blob URL 则它不会显示任何内容 但是 当我尝试绑定直接 URL 时 它可以显示 PDF 文件 这是我下面给出的代码 我的 TS 代码 downloa
  • Google Sheets API v4 和 valueInputOption

    我的电子表格中有三列 第一个是日期 第二个和第三个是简单字符串 当我批量上传数据时valueInputOption RAW 我的日期列得到错误的结果 所有日期前面都有一个看不见的撇号 字符串列没问题 当我使用valueInputOption
  • 寻找Android源代码

    Android API 是开源的吗 如果是这样 我想看看他们如何实现 ListView 对象的 smoothscroll 方法 这是在 API 级别 8 中实现的 但我想针对早期的 API 级别进行构建 我该如何找到这个 是的 它是开源的
  • 使用 selenium 和 python 来提取 javascript 生成的 HTML?萤火虫?

    这里是Python新手 我遇到的是数据收集问题 我在这个网站上 当我用 Firebug 检查我想要的元素时 它显示了包含我需要的信息的源 然而常规源代码 没有 Firebug 不会给我这个信息 这意味着我也无法通过正常的 selenium
  • 检测到通过 ChromeDriver 启动的 Chrome 浏览器

    我正在尝试在 python 中使用 selenium chromedriver 来访问 www mouser co uk 网站 然而 从第一次拍摄开始 它就被检测为机器人 有人对此有解释吗 此后我使用的代码 options Options
  • Selenium 与 HtmlUnit? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我试图更好地理解测试框架并一直在研究 Selenium 我用过HTMLUnit http htmlun

随机推荐

  • 【算法】找到单次出现的元素最佳方法——异或

    背景 Leetcode 389 找不同 https leetcode cn com problems find the difference xff0c 以为用ASCII码值相减已经很快了 xff0c 没想到还有更骚的 直接异或 附上大神代
  • 【Python】可设置抽奖者权重的抽奖脚本

    功能描述 抽奖系统包含如下特点 xff1a 1 可给不同抽奖者设置不同的权重 2 先从价值高的奖品开始抽 3 已经中奖的人 xff0c 不再参与后续的抽奖 代码 第一个数字表示某一个用户的中奖编号 xff0c 第二个数字表示该用户的中奖权重
  • 【Python】for i in range ()作用

    for i in range 作用 xff1a range 是一个函数 xff0c for i in range 就是给i赋值 xff1a 比如 for i in range xff08 1 xff0c 3 xff09 xff1a 就是把1
  • “网站处于联机状态,但未对连接尝试做出响应解决方案”解决方案

    症状 xff1a 1 电脑部分网页能正常打开 xff0c 一部分不能正常打开 2 诊断时显示 处于联机状态却未响应 3 用360断网急救工具箱显示没有问题能够正常上网 解决方案 xff1a 1 打开 网络和共享中心 2 禁用 当前的网络 x
  • Vue项目如何安装使用moment.js

    Vue项目如何安装使用moment js 1 什么是moment js 它是一个简单易用的轻量级Javascript日期处理类库 xff0c 提供了日期格式化 日期解析等功能 xff0c 且支持在浏览器和NodeJS两种环境中运行 2 Vu
  • 【Chrome插件】打包扩展程序错误:清单文件缺失或不可读取——正确打包步骤

    亲测有效 xff1a https www cnblogs com Marydon20170307 p 7114775 html utm source 61 itdadao amp utm medium 61 referral
  • 【Linux】conda: command not found解决办法

    在终端输入conda info envs检验anaconda是否安装成功 xff0c 发现报错 xff1a conda command not found 原因是因为 bashrc文件没有配置好 vim bashrc 在最后一行加上 exp
  • Linux下设置DISPLAY问题总结

    Linux下设置DISPLAY问题总结 问题描述 xff1a 想要在Linux下展示图形界面 xff0c 需要配置DISPLAY xff1b 如何通过命令进行配置 xff1f 一 export命令 export DISPLAY 61 这值代
  • iOS设置圆角的四种方法

    iOS设置圆角的四种方法 1 设置CALayer的cornerRadius2 设置CALayer的mask3 通过Core Graphics重新绘制带圆角的视图4 通过混合图层5 总结 1 设置CALayer的cornerRadius co
  • Python运行时,提示SyntaxError: invalid syntax怎么解决

    Python真是太火了 xff0c 最近我也入了Python的坑 xff0c 开始自学Python 昨天在编写一个基于python 3的小游戏 xff0c 但是出现了这个错误 xff1a SyntaxError xff1a invalid
  • hive:函数:json_tuple处理json数据

    在处理日志数据时 xff0c 会遇到json格式的数据 那么 xff0c 在hive中如何处理它呢 xff1f 一般情况下 xff0c json数据会以string类型 xff0c 字符串格式进行存储 创建案例 create databas
  • 知乎火爆问题:CV 和 NLP 哪个前景更好?

    又到一年毕业季 xff0c 小编看到不少马上要毕业的学生在知乎名为 cv和nlp哪个前景更好的 帖子下热烈讨论 xff01 xff08 图片来源于知乎 xff09 相信不少人有这样的疑问 xff0c 甚至有人说今天AI的行业 xff0c C
  • 旧电脑改造攻略

    1 手头电脑 联想A8 笔记本 xff08 A核A卡 xff09 华硕 i5 6033U xff08 A卡 xff09 Dell 笔记本 i5 NVIDIA 还能用 联想台式机 xff08 2G内存 xff0c 已经换SSD xff09 2
  • 大恒相机实时采图

    目录 前言正文准备工作设备的初始化设备信息的获取主动采图相机参数配置创建doc树获取doc树下的每一个元素并将其信息写入xml文件中 被动采图 总结 前言 本篇博客稍微记录一下我所写的插件 具体内容是有关于大恒相机的 xff0c 关于这个相
  • 转:MySQL 8.0 配置mysql_native_password身份验证插件的密码

    https blog csdn net zhengbin9 article details 82729861 方法一 xff1a 登录MySQL后输入 xff1a ALTER USER 39 root 39 64 39 localhost
  • Debian系统的LNMP网站(Web)环境搭建+MySQL数据库可视化工具phpMyAdmin的安装

    开始 提示 每次完成对Nginx PHP MariaDB phpMyAdmin做配置文件修改后 重启Nginx php mariadb服务再查看配置效果是一个好习惯 安装Nginx 1 安装Nginx 指令 sudo apt install
  • TDengine时序数据库性能测试

    前言 TDengine Database官方及社区里有一些性能测试对比案例 xff0c 不过发布的都比较早 xff0c 其使用的版本都是早期低版本 本次测试参考官方提测的 使用 taosdemo 对 TDengine 进行性能测试 文章进行
  • ubuntu安装anaconda后,终端输入conda,未找到命令解决

    1 linux出现permission denied权限不足的解决方案 输入 sudo chmod R 777 文件路径 执行完即可看到文件夹的锁消失了 2 ubuntu安装anaconda后 xff0c 终端输入conda xff0c 出
  • 用OpenCV实现目标追踪的八种方法(转)

    原文地址 xff1a http m elecfans com article 722414 html 编者按 xff1a 目标跟踪作为机器学习的一个重要分支 xff0c 加之其在日常生活 军事行动中的广泛应用 xff0c 很多国内外学者都对
  • selenium 常用API

    Selenium 常用API 之操作浏览器 上文我们讲解了如何打开浏览器 xff0c 本文讲讲解关于操作浏览器的更多API 后退 span class token comment 后退 span driver span class toke