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

Python|爬虫和测试|selenium框架的安装和初步使用(一)

前言:

Python作为一门胶水语言来说,可以说是十分的优秀,什么事情都可以干,并且在某些领域还能干的非常不错,尤其是在爬虫和测试领域,该语言可以说是没有对手。

这么说的原因是因为如果你要使用爬虫爬取某些东西或者对于某些项目做一些测试工作,并且这个测试工作还是比较繁琐的时候,那么,Python可以帮助你实现完全的自动化,从而解放双手和大脑,而你并不会去考虑其它的任何语言,虽然这些功能其它语言是能够实现的,例如,测试工作,Java语言可以实现,js语言也可以实现,如果从开发效率这个维度来看的话,开发效率会是Python的几分之一甚至是十几分之一,如果从运行效率这个维度来看的话,那么,其它的语言可能会比Python快上那么一丢丢,但,who  care呢?

单纯的从测试这个工作的视角来看,现在有很多的工具可以实现,例如jmeter,ab,selenium,TestDirector ,silktest,apifox,loadrunner等等工具,这些工具按类型可以分为压力测试,性能测试,功能测试等等。

那么,功能测试里selenium是比较好的一款软件了,只是它需要使用Python语言开发,使用上是有一定的难度的(接近前端的底层,完全在代码层面控制操作)

而selenium可以做压力测试,功能测试和性能测试,但主要集中在性能测试上,突出的优点是该软件由于是完全模拟人工点击,因此它的准确率是非常高的。

那么,本文将介绍如何安装部署selenium以及selenium模拟登录的一个演示,也就是一个基本的性能测试。

一,

selenium框架的架构

selenium框架可以运行在Python2或者Python3下,基本是不挑Python版本的,这一点是比较友好的地方。

其次,需要一个浏览器,比如,谷歌浏览器,Firefox浏览器,eg浏览器,IE浏览器等等,一般支持的是这四种常用的浏览器,但浏览器的版本最好是不要太高,接近用户所使用的浏览器版本即可。

最后呢,就是selenium需要浏览器的驱动,一般谷歌浏览器的驱动下载地址:CNPM Binaries Mirror   这里需要特别注意,驱动的版本和浏览器的版本最好是一致的,不能相差太大,否则selenium可能会启动报错。

如果selenium成功的启动,它将会通过驱动,打开一个浏览器的实例,并按照你代码内的定义动作进行点击或者输入,例如自动登录某个网站(这个网站可能会是你的项目的入口),当然了,随着技术的进步,高版本的selenium会在后台打开一个无头浏览器,也就是说这个浏览器你是看不到的,但它会做你定义的动作。

特别说明:

测试工作一般是在应用端,也可以理解为客户端工作(也就是b端),而百分之九十的项目是部署在Linux端(一般需要测试的项目是b/s架构的),但客户端一般都是使用Windows的,因此,selenium也主要是安装在Windows端,前面刚开始学习的时候就犯糊涂了,在Linux下安装selenium,通常是不需要这样做的。

本次实验用的Python版本是3.8.1,谷歌浏览器版本是86版本

 

驱动下载一定要注意是win32的 

 

二,

Windows部署环境

非常的简单,没什么好说的,Python安装都不好意思说了,非常的简单,傻瓜化的下一步就完事。

selenium也是非常的简单,一条命令就可以了:pip install selenium  ,这里只是需要注意一点,由于Python的安装包基本都是国外的,因此需要本地化处理一下:

严谨点,在资源管理器栏输入命令 :%appdata%,该命令是定位该文件夹,在此目录内新建文件夹名称为pip,在该新建文件夹内新建文本文档名称为pip.ini。写入如下内容:

[global]
index-url=http://mirrors.aliyun.com/pypi/simple/
timeout = 6000
[install] 
trusted-host=mirrors.aliyun.com

打开cmd,执行上面的安装命令pip install selenium 

注意了哈,这里安装的selenium是4.11.2版本,4.0版本以上和4.0版本以下selenium的用法是有很多差异的,本例以4.0版本以上为例,就不说4.0版本以下了 

三,

运行第一个selenium,打开百度的首页

需要先把谷歌浏览器的驱动放置到Python的可执行文件同层目录下,具体步骤如下:

1,

查询Python的安装位置

2,

chromedriver_win32.zip这个文件解压出来的驱动放置到上面查询的目录下即可 

3,

编写Python文件,文件内容如下:

from selenium import webdriver# 初始化浏览器为chrome浏览器
browser = webdriver.Chrome()# 访问百度首页
browser.get(r'https://www.baidu.com/')# 关闭浏览器
browser.close()

4,

cmd窗口内运行此Python文件

如果谷歌浏览器版本和驱动的版本不匹配将会报错如下:

(我是使用了114的驱动,但谷歌浏览器的版本是86,因此报错)

 正常的无报错的运行:

 四,

保持selenium的窗口是打开的状态

代码内增加一个无限循环:

from selenium import webdriver# 初始化浏览器为chrome浏览器
browser = webdriver.Chrome()
while 2>0:# 访问百度首页browser.get(r'https://www.baidu.com/')# 关闭浏览器
browser.close()

效果如下图:

那么这个方式是比较粗暴的,有没有优雅一些的方法呢?

from selenium import webdriver# 获取配置对象 => 什么样的浏览器就选择什么浏览器配置
option = webdriver.ChromeOptions()
option.add_experimental_option("detach", True)# 获取driver对象, 并将配置好的option传入进去
driver = webdriver.Chrome(options=option)
driver.get('https://www.baidu.com')

五,

关于谷歌浏览器和谷歌浏览器的驱动问题

首先,谷歌浏览器和它的驱动是必须要强对应的,比如,谷歌浏览器版本是版本 89.0.4389.128(正式版本) (64 位),那么,驱动应该是下图那样的

 

 其次,是谷歌浏览器会自动更新升级,而自动更新升级是比较难以关闭的,因此,可以选择谷歌的离线安装版本,这样可以规避谷歌浏览器的自动升级,因此,本文将谷歌浏览器的离线安装包分享出来,大家根据自己情况使用:

链接:https://pan.baidu.com/s/1ba74wDCYT5TY1uocxjFyBA?pwd=kkey 
提取码:kkey 

OK,如果谷歌浏览器是正常安装的话,selenium会自动的找到它,如果是离线安装的,比如,我后面将谷歌浏览器安装在了桌面,这个时候自然是找不到谷歌浏览器了,怎么办呢?

代码里指定谷歌浏览器的位置:

注:需要多导一个模块,也就是第三行,第四行指定谷歌浏览器的执行文件,第五行表示程序执行完不关闭浏览器

#codding=utf-8
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.binary_location = "C:\\Users\\Administrator\\Desktop\\chrome\\Chrome-bin\\chrome.exe"
options.add_experimental_option("detach", True)
driver = webdriver.Chrome(options=options)
driver.get("http://www.baidu.com")

同时指定驱动的位置:

#注:增加第四行,变量path的值是驱动的路径,在后面的对象中引用即可。

#codding=utf-8
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
options = Options()
options.binary_location = "C:\\Users\\Administrator\\Desktop\\chrome\\Chrome-bin\\chrome.exe"
options.add_experimental_option("detach", True)
path=Service('f:\\chromedriver.exe')
driver = webdriver.Chrome(options=options,service=path)
driver.get("http://www.baidu.com")

OK,selenium暂时调试好了,下一篇文章将讲述如何实际应用此框架。

相关文章:

Python|爬虫和测试|selenium框架的安装和初步使用(一)

前言: Python作为一门胶水语言来说,可以说是十分的优秀,什么事情都可以干,并且在某些领域还能干的非常不错,尤其是在爬虫和测试领域,该语言可以说是没有对手。 这么说的原因是因为如果你要使用爬虫爬取某…...

SAP FI之定义财务年和财务年度变式(Fiscal Year Variants)

目录 前言 一、财务年度/财务年度变式 二、使用步骤 1.配置步骤 前言 本文主要介绍SAP会计年度和SAP会计年度变式。 一、财务年度/财务年度变式 财务年度可以具有与日历年相同的期间,也可以不同。中国财政年度从1月到12月,称为历年制,有…...

关于SAM中decomposed Relative Positional Embeddings的理解

关于SAM中decomposed Relative Positional Embeddings的理解。 relative positional embedding的一种实现方式是:先计算q和k的相对位置坐标,然后依据相对位置坐标从给定的table中取值。以q和k都是77为例,每个相对位置有两个索引对应x和y两个…...

1、Spring是什么?

Spring 是一款主流的 Java EE 轻量级开源框架 。 框架 你可以理解为是一个程序的半成品,它帮我们实现了一部分功能,用这个框架我们可以减少代码的实现和功能的开发。 开源 也就是说,它开放源代码。通过源代码,你可以看到它是如何…...

【华为OD机试python】阿里巴巴找黄金宝箱(IV)【2023 B卷|200分】

题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地, 藏宝地有编号从0-N的箱子,每个箱子上面有一个数字,箱子排列成一个环, 编号最大的箱子的下一个是编号为0的箱子。 请输出每个箱子贴的数字之后的第一个比它大的数,如果不存在则输出-1。 输入…...

操作系统复习总结5

操作系统复习总结,仅供笔者复习使用,参考教材: 《操作系统原理》 - 何静媛编著. 西安电子科技大学出版社《操作系统考研复习指导》2024年 - 王道论坛组编. 电子工业出版社 本文主要内容为:输入输出管理; 计算机系统…...

【LeetCode】406.根据身高重建队列

题目 假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。 请你重新构造并返回输入数组…...

渗透测试漏洞原理之---【任意文件包含漏洞】

文章目录 1、文件包含概述1.1 文件包含语句1.1.1、相关配置 1.2、动态包含1.2.1、示例代码1.2.2、本地文件包含1.2.3、远程文件包含 1.3、漏洞原理1.3.1、特点 2、文件包含攻防2.1、利用方法2.1.1、包含图片木马2.1.2、读取敏感文件2.1.3、读取PHP文件源码2.1.4、执行PHP命令2.…...

day28 异常

to{}catch{} try{}catch{}的流传输 try {fis new FileInputStream("file-APP\\fos.txt");fos new FileOutputStream("fos.txt");int a ;while ((a fis.read())! -1){fos.write(a);}System.out.println(a); } catch (IOException e) {e.printStackTrace()…...

Pico使用C/C++选择使用哪个I2C控制器,以及SDA和SCL针脚

本文一开始讲述了解决方案,后面是我做的笔记,用来讲述我的发现流程和探究的 Pico I2C 代码结构。 前提知识 首先要说明一点:Pico 有两个 I2C,也就是两套 SDA 和 SCL。这点你可以在针脚图中名字看出,比如下图的 Pin 4…...

C++动态内存管理

动态内存 在C/C程序中(线程)栈空间是有限的,大部分变量使用的都是动态分配来的堆内存,这些动态申请来的堆内存是需要开发者通过代码去自行管理的。如何管理好这些动态申请来的内存,是C/C开发中的一个重点难点问题。 m…...

SpringBoot—日志

目录 日志使用日志日志级别设置日志级别设置分组指定日志文件路径日志切割归档使用第三方日志框架log4j2配置文件【分级存储】logback配置文件【分级存储】 实例代码 日志 使用日志 给controller添加日志信息 要给controller类上添加Slf4j注解,然后使用log.info(…...

如何在,Linux中安装Luajit2.*

1.文件下载The LuaJIT Project 2.将下载文件上传到对应的服务器:例如/opt 3.进入对应的文件夹 4.make PREFIX/usr/local,设置安装路径 5.make install,编译安装 6.进入安装目录,cd /usr/local/include/luajit-2.0 7.luajit -v…...

单片机-如何让数码管动态显示

数码管硬件图 1、数码管 连接 74HC245 芯片 单片机IO口输出难稳定,需要数码管与单片机连接需要增加驱动电路, 使用 74HC245 abcdefgDP并联导出 74HC245 对数码管进行驱动,P0 是输出电流 来驱动各个段的 驱动芯片 增加电阻 是为了防止电流…...

在Visual Studio 2017上配置并使用OpenGL

1 在Visual Studio 2017上配置并使用OpenGL 在GLUT - The OpenGL Utility Toolkit:GLUT - The OpenGL Utility Toolkit中点击“GLUT for Microsoft Windows 95 & NT users”,选择“If you want just the GLUT header file, the .LIB, and .DLL file…...

【C++】多态学习

多态 多态的概念与定义多态的概念构成多态的两个条件虚函数与重写重写的两个特例 final 和 override重载、重写(覆盖)、重定义(隐藏)的对比抽象类多态的原理静态绑定与动态绑定 单继承与多继承关系下的虚函数表(派生类)单继承中的虚函数表查看多继承中的虚函数表查看 菱形继承与…...

大数据之Maven

一、Maven的作用 作用一:下载对应的jar包 避免jar包重复下载配置,保证多个工程共用一份jar包。Maven有一个本地仓库,可以通过pom.xml文件来记录jar所在的位置。Maven会自动从远程仓库下载jar包,并且会下载所依赖的其他jar包&…...

自制centos7.9的wsl发行版

自制centos7.9的wsl发行版 参考:https://zhuanlan.zhihu.com/p/482538727 Windows10提供了一个wsl工具用于直接在windows上运行Linux子系统。 CentOS国内镜像下载:https://mirrors.aliyun.com/centos/ 这里选择了7.9.2009版本:https://mirr…...

使用VisualStudio制作上位机(五)

文章目录 使用VisualStudio制作上位机(五)第四部分:GUI界面数据显示使用VisualStudio制作上位机(五) Author:YAL 第四部分:GUI界面数据显示 这一部分,主要实现GUI的界面显示。 上一文已经实现了CAN数据的接收,并将数据更新到数组里。所以在做界面的显示时,只需要在…...

ChatGPT在医疗领域可应用于改善与患者的沟通

注意:本信息仅供参考,发布该内容旨在传递更多信息的目的,并不意味着赞同其观点或证实其说法。 自从ChatGPT在2022年末对公众开放以来,OpenAI的这款生成式AI聊天机器人在医疗领域展示出了巨大潜力。它已经通过了美国医学执照考试&a…...

【JavaEE】-- HTTP

1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

day52 ResNet18 CBAM

在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...

6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙

Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...