Selenium自动化 Web 浏览器操作

news2024/11/11 10:58:09

文章目录

  • Selenium自动化 Web 浏览器操作
    • Selenium简介
    • 安装Selenium
    • 安装WebDriver
    • 使用问题
      • 驱动加载报错
      • 版本不匹配
    • 常用API
      • 创建实例
      • 定位元素
      • 鼠标事件
      • 表单相关
      • 多窗口切换
      • 等待
        • 显示等待
        • 隐式等待
    • 文件上传下载
    • 经验总结

Selenium自动化 Web 浏览器操作

Selenium简介

Selenium可以模拟浏览器运行,用于web应用程序测试工具。可以直接运行浏览器,像用户自己操作一样。

安装Selenium

pip install selenium

安装WebDriver

WebDriver安装版本要和所安装的浏览器版本一致,这里使用谷歌浏览器

先查看谷歌浏览器版本

chrome://version/

选择版本一致的驱动

https://chromedriver.storage.googleapis.com/index.html(114版本之前)

https://googlechromelabs.github.io/chrome-for-testing/#canary(128版本之后)

若找不到一致的就选择相近的版本

使用问题

驱动加载报错

AttributeError: ‘str’ object has no attribute ‘capabilities’

原因是selenium 版本太高,初始化驱动方式有问题

# 不能使用这种方式
driver = webdriver.Chrome("./chromedriver")
# 应该使用这种方式
driver = webdriver.Chrome()

得出结论,使用一个库时,不能仅网上搜出代码就直接使用,要找到库官方网站对应的版本使用文档,按照文档来使用,就会少出很多问题。

版本不匹配

selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 114,Current browser version is 128.0.6613.119

下载相应版本,并放到程序同一个目录即可。

常用API

常用API仅做参考,当使用一个库时,要去官方文档看自己使用版本对应的文档,因为随着版本更新,函数API都是会变化的,只要掌握基本思路即可。该Selenium版本是4.24

创建实例

# 加detach 配置 ,让程序执行完,浏览器不关闭,除非程序中指定的关闭
options = webdriver.ChromeOptions()
options.add_experimental_option('detach', True)
# 初始化 WebDriver(记得替换路径)
driver = webdriver.Chrome(options=options)

该版本的初始化驱动,会默认从安装驱动的链接去下载,若遇到网络不好,则会一直卡住,需要等待好长时间。下面可以配置自己下载的驱动

driver = webdriver.Chrome(service=Service(executable_path=r'.\chromedriver.exe'),options=options)

定位元素

# 打开浏览器(指定具体页面ip路径)
driver.get("https://www.baidu.com")
# 查找第一个匹配的元素
login_element = driver.find_element(By.CLASS_NAME, 'login')
# 查找匹配到的所有元素
login_element = driver.find_elements(By.CLASS_NAME, 'login')

driver.find_element(By, value),其中By 参数可以是如下:

在这里插入图片描述

其中,XPATH是网页元素从根节点到该节点的路径定位,可以唯一定位一个元素(网页元素各个节点构成一个树形结构)

ID 就是元素定义的ID,前端开发时写的

Class_name 元素定义的class

TAG_name 元素名称

其他的就不写了,使用时自己尝试

由于现在web应用基本都是基于vue或react单页面应用了,前端开发时不会定义那么详细ID和class,那么这种场景下,直接使用XPATH是最高效的方法。

鼠标事件

# 模拟鼠标点击
login_element.click()

表单相关

# 模拟输入框输入(send_keys())
driver.find_element(By.XPATH,
                        "//*[@id='app']/div/div[1]/div[2]/div[2]/div/div[2]/form/div[1]/div/div/input").send_keys(
        account)

多窗口切换

在web应用中,点击页面时,往往会打开多个浏览器标签页,也就是多个窗口。

Selenium会为每个窗口创建一个句柄,并存储下来,用来切换窗口。当窗口关闭时,句柄值就会清除。

# 获取当前窗口句柄
driver.getWindowHandle()
# 获取所有打开的窗口句柄
driver.getWindowHandles()
# 切换到新的窗口
curWindow = driver.getWindowHandle()
allWindow = driver.getWindowHandles()
     for w in allWindow:
       if w!=curWindow:
       driver.switchTo().window(w)
 

对于单页面应用,切换页面不算切换窗口,因为始终是在一个标签页里切换。

等待

由于web网页用了很多新技术,页面加载也有快有慢,若某个元素还未加载出来,便定位获取,就会抛出异常。等待机制就是等元素加载完后再获取元素定位。分为显示等待和隐式等待,意思就是程序暂停多长时间再继续执行。

显示等待
# 等待10s后,判断until后的条件是否满足,是则返回该元素,否则抛出异常
element = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.XPATH,'')))

until后的条件有很多,可以自己去探索

隐式等待
# 直接指定等待时间 单位是S 
driver.implicitly_wait(10)

这个用于指定所有元素被定位到的等待时间,意思就是 所有元素定位前都要等待这个时间之后再去定位元素

也可以使用time.sleep(3),但效率会比较低。

若要等待新页面加载完后,再执行,可以使用如下:

WebDriverWait(driver,3).until(EC.url_changes(driver.current_url))

文件上传下载

下载比较简单,就是定位到页面的下载链接,直接点击即可

上传

driver.find_element(By.XPATH, '//*[@id="pane-1"]/div[1]/div/input').send_keys(r'C:\Users\xxx\Desktop\1.jpg')

上传思路就是找到对应的文件表单,把要上传的图片直接写进去。该方法没有打开文件资源管理器选择文件步骤

经验总结

1 显示等待和隐式等待不能一起使用,会报超时错误;

2 显示等待有时不太好用,直接使用time.sleep()会稳定很多,但效率会低,看怎么取舍;

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

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

相关文章

Bio-Linux-shell详解-1-从0开始

21世纪是数据的世纪,蓬勃发展的生物学积累了大量的数据,急需计算生物学、生物信息学及系统生物学等交叉学科大放异彩,而windows作为我们最熟悉的操作平台,并不能承担如此巨大的工作量,课题组的服务器因此承担了这个责任…

玩崩坏星穹铁道手机配置低、卡顿发烫、内存不足 GameViewer远程助你手机畅玩星铁PC端

9月10日,《崩坏:星穹铁道》迎来2.5版本「碧羽飞黄射天狼」!不知道大家有没有抽到 飞霄?这次崩铁还为我们送了10连和 1000星琼 ,上半卡池还有五星角色飞霄、知更鸟、卡芙卡、黑天鹅这四位角色,深受大家喜爱。…

Redis常用操作及springboot整合redis

1. Redis和Mysql的区别 数据模型:二者都是数据库,但是不同的是mysql是进行存储到磁盘当中,而Redis是进行存储到内存中. 数据模型 : mysql的存储的形式是二维表而Redis是通过key-value键值对的形式进行存储数据. 实际的应用的场景: Redis适合于需要快速读写的场景&…

在Word中,用VBA比较两段文本的相似度

效果1: 去掉字符串中回车,进行改进后效果: 代码: Function LevenshteinDistance(s As String, t As String) As IntegerDim d() As IntegerDim i As IntegerDim j As IntegerDim cost As IntegerDim sLen As IntegerDim tLen As IntegersLen…

nginx实现https安全访问的详细配置过程

文章目录 前言什么是 HTTP?什么是 HTTPS?HTTP 和 HTTPS 的区别为什么 HTTPS 被称为安全的?配置过程配置自签名证书 前言 首先我们来简单了解一下什么是http和https以及他们的区别所在. 什么是 HTTP? HTTP,全称为“超…

IDEA 怎么编辑文件模板

1.打开设置2.打开编辑者,选择编辑文件模板 3.点击加号4.先随便编译一次5.之后编辑文件模板就有了

电脑浏览器访问华为路由器报错,无法访问路由器web界面:ERR_SSL_VERSION_OR_CIPHER_MISMATCH 最简单的解决办法!

This site can’t provide a secure connection192.168.2.1 uses an unsupported protocol. ERR_SSL_VERSION_OR_CIPHER_MISMATCH 以上是chrome浏览器访问报错 Secure Connection Failed An error occurred during a connection to 192.168.2.1. Peer using unsupported versio…

python 异步执行 apply_async 方法

1.项目需要读取hive表数据,并对返回的数据进行解析; select * from table ; 2.返回数据,根据库、表,对其进行 下一步执行; 中间遇到一个棘手的问题,在python线程池中,使用异步非阻塞 apply_a…

(k8s)kubernetes 挂载 minio csi 的方式(pod挂载pvc存在csi驱动问题,挂载不上)

一、安装Minio(Minio分布式集群搭建部署_minio集群最少几台-CSDN博客) 生成accessKeyID和secretAccessKey: 二、安装csi-s3插件(在k8s集群上) 首先我们把插件的yaml文件都下载下来,为了保证版本测试的一致性,我们下载…

如何在社交媒体上赚取(可观的)收入

有很多百万富翁是通过社交媒体粉丝建立起他们的财富的,而且其中大部分并不是Instagram网红或YouTube明星。 例如,Nick Huber通过社交媒体粉丝建立了几家企业,这些企业现在每月创造40万美元的收入。 而George Blackman在Twitter上仅有不到8,0…

微信自动回复设置真嘎嘎好用!

无论是商户、个人品牌还是普通用户,及时回应朋友和客户的信息至关重要。然而,手动一一回复既耗时又容易遗漏,这时,微信的自动回复功能就显得尤为重要。 今天,就教大家一招——通过个微管理系统,实现微信自…

怎么在线制作活码二维码?活码在电脑快速制作的方法

怎么制作活码类型的二维码?活码是现在很常用的一种内容展示,将内容通过二维码来展示,可以长期提供内容展示,而且在更新内容无需重新生码,可以直接在原码中修改。与其他方式相比有效提高内容传播的效率,在节…

【信号】SIGCHLD信号--了解

SIGCHLD是多少号信号呢?17号 我们知道用wait和waitpid函数清理僵尸进程,父进程可以阻塞等待子进程结束,也可以非阻塞地查询是否有子进程结束等待清理(也就是轮询的方式)。采用第一种方式,父进程阻塞了就不能处理自己的工作了;采用第二种方式,父进程在处理自己的工作…

iptables实现内外网ip转换

准备三台虚拟机 内网访问外网 网络设置为仅主机(关闭DHCP功能) 设置一台双网卡机器充当iptables服务器 设置一台内网机 设置一台外网机,下载并开启httpd服务 在iptables服务器上设置iptables 在/etc/sysctl.conf中添加net.ipv4.ip_forwar…

零基础入门大模型,带你构建第一个大模型:实战指南

2017年是机器学习领域历史性的一年。Google Brain 团队的研究人员推出了 Transformer,它的性能迅速超越了大多数现有的深度学习方法。著名的注意力机制成为未来 Transformer 衍生模型的关键组成部分。Transformer 架构的惊人之处在于其巨大的灵活性:它可…

2024年上半年互联网黑灰产研究报告

2024年上半年,黑灰产从业人员人数超过427万,威胁猎人监测到国内作恶手机号数量高达323万,日活跃风险IP数量1136万,涉及洗钱银行卡数量19.5万。 近年来,数字化与实体经济的融合日渐深入,大规模业务线上场景…

Golang开发之路

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

做谷歌seo,b端跟c端有什么区别吗?

事实上大部分都没有区别,谷歌seo要做的事情其实都差不多,站内优化,站外推广,唯一不同的,就是在关键词的调研以及创建内容的时候不同,不过光是这一点不同,就能导致B端网站跟C端网站的决定性差异&…

HTML + js 生成一个线路走向图,可以标记总共有多少站,用户到达第几站了

文章目录 前言一、用途二、使用步骤1.轨迹代码2.运行前言 HTML + js 生成一个线路走向图 例如:用来记录用户到达那一站了,可以标记总共有多少站,用户到达第几站了 提示:以下是本篇文章正文内容,下面案例可供参考 一、用途 用来记录用户到达那一站了,可以标记总共有多少…

保姆级AI编程Cursor-Vscode使用教程

一: 下载,安装(输入语言后,然后迁移插件) 下载地址:https://www.cursor.com/settings 二: 登录 三. 玩AI--给一张UI图,一键生成需求代码(需要自己去小改一下,大部分都可用) 四、项目实践-优…