编写第一个Selenium脚本

目录

安装Selenium类库

请求对应的程序语言

Pip

下载

在项目中使用

编写第一个Selenium脚本

八个基本组成部分

1. 使用驱动实例开启会话

本地驱动

驱动自动管理

驱动选项

浏览器选项

Capabilities

Timeouts

2. 在浏览器上执行操作

3. 请求 浏览器信息

4. 建立等待策略

5. 发送命令 查找元素

6. 操作元素

7. 获取元素信息

8. 结束会话


安装Selenium类库

配置自动化的浏览器.

首先,您需要为自动化项目安装 Selenium 绑定库。 库的安装过程取决于您选择使用的语言。

请求对应的程序语言

该库所支持的Python版本最低版本可以在 支持的Python版本 章节中找到 PyPi

这里提供了几种不同的方式来安装 Selenium .

Pip

pip install selenium

下载

此外你可以从这里下载 PyPI source archive (selenium-x.x.x.tar.gz) 并通过: setup.py 文件安装:

python setup.py install

在项目中使用

为了在项目中使用它,需要将它添加到 requirements.txt 文件中:

selenium==4.16.0

逐步构建一个Selenium脚本的说明

当你完成 Selenium安装 后, 便可以开始书写Selenium脚本了.

编写第一个Selenium脚本

八个基本组成部分

Selenium所做的一切, 就是发送给浏览器命令, 用以执行某些操作或为信息发送请求. 您将使用Selenium执行的大部分操作, 都是以下基本命令的组合

1. 使用驱动实例开启会话

driver = webdriver.Chrome()

关于如何启动会话,请浏览文档 驱动会话,驱动会员用于启动和停止会话, 用于打开和关闭浏览器.

会话是通过初始化新的驱动类对象自动创建的.每种语言都允许使用来自这些类 (或等效类) 之一的参数创建会话,可以创建本地驱动,这个需要下载驱动程序,或者使用webdriver-manager 库来自动管理驱动安装,以下分别是本地方式指定驱动位置和webdriver-manager管理驱动(推荐)

本地驱动

启动本地驱动的首要唯一参数 包括在本地计算机上有关启动所需驱动服务的信息

 self.driver = webdriver.Chrome(executable_path='F:\\PycharmProjects\\PythonPractise\\selenium_po\\driver\\chromedriver.exe')
驱动自动管理

 webdriver-manager可以根据用户环境的浏览器版本自行匹配最适合的驱动程序。

安装管理器:

pip install webdriver-manager

以 Chrome 为例

# selenium 3 
from  selenium  import  webdriver 
from  webdriver_manager.chrome  import  ChromeDriverManager driver  =  webdriver . Chrome ( ChromeDriverManager () .install())
# selenium 4 
from  selenium  import  webdriver 
from  selenium.webdriver.chrome.service  import  Service  as  ChromeService 
from  webdriver_manager.chrome  import  ChromeDriverManager driver  =  webdriver . Chrome (service= ChromeService ( ChromeDriverManager () . install ()))
驱动选项

选项 描述您想要的会话类型; 默认值为local,但是对于remote则是必须设置的。

浏览器选项

这些capabilities用于所有浏览器.在 Selenium 3 中, capabilities是借助"Desired Capabilities"类定义于会话中的. 从 Selenium 4 开始, 您必须使用浏览器选项类. 对于远程驱动程序会话, 浏览器选项实例是必需的, 因为它确定将使用哪个浏览器.这些选项在 Capabilities 的 w3c 规范中进行了描述.

每个浏览器都有 自定义选项 , 是规范定义之外的内容.

例如:

Capabilities
CapabilityKeyValue TypeDescription
Browser name"browserName"stringIdentifies the user agent.
Browser version"browserVersion"stringIdentifies the version of the user agent.
Platform name"platformName"stringIdentifies the operating system of the endpoint node.
Accept insecure TLS certificates"acceptInsecureCerts"booleanIndicates whether untrusted and self-signed TLS certificates are implicitly trusted on navigation for the duration of the session.
Page load strategy"pageLoadStrategy"stringDefines the current session’s page loading strategy.
Proxy configuration"proxy"JSON ObjectDefines the current session’s proxy configuration.
Window dimensioning/positioning"setWindowRect"booleanIndicates whether the remote end supports all of the resizing and repositioning commands.
Session timeouts"timeouts"JSON ObjectDescribes the timeouts imposed on certain session operations.
Strict file interactability"strictFileInteractability"booleanDefines the current session’s strict file interactability.
Unhandled prompt behavior"unhandledPromptBehavior"stringDescribes the current session’s user prompt handler. Defaults to the dismiss and notify state.
Timeouts
FieldDefaultJSON keyOptional†NullableDescription†
Script timeout30,000"script"

Specifies when to interrupt a script that is being evaluated.

A null value implies that scripts should never be interrupted, but instead run indefinitely.

Page load timeout300,000"pageLoad"

Provides the timeout limit used to interrupt an explicit navigation attempt.

Implicit wait timeout0"implicit"

Specifies a time to wait for the element location strategy to complete when locating an element

2. 在浏览器上执行操作

在本例中, 我们 导航 到一个网页.

driver.get("https://www.selenium.dev/selenium/web/web-form.html")

3. 请求 浏览器信息

您可以请求一系列关于浏览器的信息 , 包括窗口句柄、浏览器尺寸/位置、cookie、警报等.

title = driver.title

4. 建立等待策略

将代码与浏览器的当前状态同步 是Selenium面临的最大挑战之一, 做好它是一个高级主题.

基本上, 您希望在尝试定位元素之前, 确保该元素位于页面上, 并且在尝试与该元素交互之前, 该元素处于可交互状态.

隐式等待很少是最好的解决方案, 但在这里最容易演示, 所以我们将使用它作为占位符.

关于等待策略 的信息.

driver.implicitly_wait(0.5)

5. 发送命令 查找元素

大多数Selenium会话中的主要命令都与元素相关, 如果不先找到元素, 就无法与之交互.

6. 操作元素

对于一个元素, 只有少数几个操作可以执行, 但您将经常使用它们.

text_box.send_keys("Selenium")
submit_button.click()

7. 获取元素信息

元素存储了很多被请求的信息.

text = message.text

8. 结束会话

这将结束驱动程序进程, 默认情况下, 该进程也会关闭浏览器. 无法向此驱动程序实例发送更多命令.

See Quitting Sessions.

driver.quit()

完整代码:

from selenium import webdriver
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()driver.get("https://www.selenium.dev/selenium/web/web-form.html")title = driver.titledriver.implicitly_wait(0.5)text_box = driver.find_element(by=By.NAME, value="my-text")
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")text_box.send_keys("Selenium")
submit_button.click()message = driver.find_element(by=By.ID, value="message")
text = message.textdriver.quit()

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

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

相关文章

CAD 审图意见的导出

看图的时候喜欢在图上直接标注意见,但是如果还要再把意见一行一行的导出到word里面就很麻烦,在网上看了一个审图软件,报价要980,而且那个审图意见做的太复杂了。 我的需求就是把图上标的单行文字和多行文字直接导出来就行&#x…

debug点f8step over会进入class文件

File->settings->Bulid.Executiong.Deployment->Debugger->Stepping 取消如图对钩即可

二十七、读写文件

二十七、读写文件 27.1 文件类QFile #include <QCoreApplication>#include<QFile> #include<QDebug>int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);QFile file("D:/main.txt");if(!file.open(QIODevice::WriteOnly | QIODe…

three.js模拟太阳系

地球的旋转轨迹目前设置为了圆形&#xff0c;效果&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div c…

illuminate/database 使用 五

之前文章&#xff1a; illuminate/database 使用 一-CSDN博客 illuminate/database 使用 二-CSDN博客 illuminate/database 使用 三-CSDN博客 illuminate/database 使用 四-CSDN博客 一、原生查询 1.1 原理 根据之前内容调用执行的静态类为Illuminate\Database\Capsule\M…

idea第一次提交到git(码云)

1.先创建一个仓库 2.将idea和仓库地址绑定 2.将idea和仓库地址绑定

CentOS 7系统加固详细方案SSH FTP MYSQL加固

一、删除后门账户 修改强口令 1、修改改密码长度需要编译login.defs文件 vi /etc/login.defs PASS_MIN_LEN 82、注释掉不需要的用户和用户组 或者 检查是否存在除root之外UID为0的用户 使用如下代码&#xff0c;对passwd文件进行检索&#xff1a; awk -F : ($30){print $1) …

Java中的锁策略

1 乐观锁 vs 悲观锁 锁的实现者预测当前锁冲突的概率&#xff0c;可分为乐观锁和悲观锁。 乐观锁&#xff1a;发生冲突的概率较小&#xff1b;主要使用在读操作较多的情况下。 悲观锁&#xff1a;发生冲突的概率较大&#xff1b;主要使用在写操作较多的情况下。 2 轻量级锁…

『K8S 入门』二:深入 Pod

『K8S 入门』二&#xff1a;深入 Pod 一、基础命令 获取所有 Pod kubectl get pods2. 获取 deploy kubectl get deploy3. 删除 deploy&#xff0c;这时候相应的 pod 就没了 kubectl delete deploy nginx4. 虽然删掉了 Pod&#xff0c;但是这是时候还有 service&#xff0c…

轻松搭建FPGA开发环境:第三课——Vivado 库编译与设置说明

工欲善其事必先利其器&#xff0c;很多人想从事FPGA的开发&#xff0c;但是不知道如何下手。既要装这个软件&#xff0c;又要装那个软件&#xff0c;还要编译仿真库&#xff0c;网上的教程一大堆&#xff0c;不知道到底应该听谁的。所以很多人还没开始就被繁琐的开发环境搭建吓…

电子学会C/C++编程等级考试2021年06月(六级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:逆波兰表达式 逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的逆波兰表示法为* +…

04 在Vue3中使用setup语法糖

概述 Starting from Vue 3.0, Vue introduces a new syntactic sugar setup attribute for the <script> tag. This attribute allows you to write code using Composition API (which we will discuss further in Chapter 5, The Composition API) in SFCs and shorte…

智能优化算法应用:基于动物迁徙算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于动物迁徙算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于动物迁徙算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.动物迁徙算法4.实验参数设定5.算法结果6.…

第十六章 : Spring Boot JWT 集成redis实现分布式token

第十六章 : Spring Boot JWT 集成redis实现分布式token 前言 本章知识重点:了解JWT 是什么,通过第一个JWT程序理解JWT的标头(Header)、有效载荷(Payload)和签名(Signature),通过Spring Boot JWT 集成redis的实践案例解读,灵活掌握JWT三大应用场景。 JWT是什么 J…

不同的葡萄酒瓶盖会影响葡萄酒饮用的体验

首先&#xff0c;不同的葡萄酒瓶盖会影响我们找到想要喝的葡萄酒的难易程度。螺旋盖、Zork瓶塞和起泡酒“蘑菇形瓶塞”赢得了直接的满足感&#xff0c;它们只需要拔瓶塞不需要开瓶器。来自云仓酒庄品牌雷盛红酒分享对于所有其他的酒瓶封口&#xff0c;我们都需要一个工具来打开…

论文阅读——Mask DINO(cvpr2023)

DINO是检测&#xff0c;Mask DINO是检测分割。 几个模型对比&#xff1a; 传统的检测分割中&#xff0c;检测头和分割头是平行的&#xff0c;Mask DINO使用二分图匹配bipartite matching提高匹配结果的准确性。 box对大的类别不计算损失&#xff0c;因为太大了&#xff0c;会…

Mac安装Typora实现markdown自由

一、什么是markdown Markdown 是一种轻量级标记语言&#xff0c;创始人为约翰格鲁伯&#xff08;John Gruber&#xff09;。 它允许人们使用易读易写的纯文本格式编写文档&#xff0c;然后转换成有效的 XHTML&#xff08;或者HTML&#xff09;文档。这种语言吸收了很多在电子邮…

verilog语法进阶-移位寄存器原语-单输入单输出

概述 verilog c代码 module primitive1(input clk , // system clock 50Mhz on boardinput rst_n, // system rst, low active input a , output y1, // output signaloutput y // output signal);SRLC16_1 #(.INIT(16h0000) // Initial Value of Shift Register ) SRLC16_1…

Python学习笔记第七十六天(OpenCV视频应用)

Python学习笔记第七十六天 OpenCV视频应用从相机中读取视频从文件中播放视频保存视频 后记 OpenCV视频应用 从相机中读取视频 OpenCV提供了cv2.VideoCapture()函数&#xff0c;用于从相机中读取视频。这个函数接受一个参数&#xff0c;即摄像头设备的编号。默认情况下&#x…

SpringCloud-高级篇(八)

&#xff08;1&#xff09;TCC模式 前面学了XA和AT模式&#xff0c;这两种模式最终都能实现一致性&#xff0c;和隔离性&#xff0c;XA是强一致&#xff0c;AT是最终一致&#xff0c;隔离性呢XA是在第一阶段不提交&#xff0c;基于事务本身的特性来完成隔离&#xff0c;AT则是…