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暂时调试好了,下一篇文章将讲述如何实际应用此框架。

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

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

相关文章

汽车自适应巡航系统车距控制策略研究

1 引言 自适应巡航控制( Adaptive Cruise Control,ACC) 是汽车驾驶辅助系统的重要组成部分,其作用是根据车距传感器探测到本车( ACC 车辆) 与主目标车辆( 前车) 之间的相对位置和相对速度信息,自动调节ACC 车辆的节气门开度或部分制动力矩( 即…

探索数据湖中的巨兽:Apache Hive分布式SQL计算平台浅度剖析!

文章目录 ◆ Apache Hive 概述1.1 分布式SQL计算1.2 Hive的优势 ◆ 模拟实现Hive功能2.1 元数据管理2.2 解析器2.3 基础架构2.4 Hive架构 ◆ Hive基础架构3.1 Hive架构图3.2 Hive组件3.2.1 元数据存储3.2.2 Driver驱动程序3.2.3 用户接口 ◆ Hive部署4.1 VMware虚拟机部署步骤一…

【学习笔记】求解线性方程组的G-S迭代法

求解线性方程组的G-S迭代法 // 运行不成功啊function [x,k,index] Gau_Seid(A,b,ep,it_max) % 求解线性方程组的G-S迭代法,其中 % A为方程组的系数矩阵 % b为方程组的右端项 % ep为精度要求,省缺为1e-5 % it_max为最大迭代次数,省缺为100 % …

新KG视点 | Jeff Pan、陈矫彦等——大语言模型与知识图谱的机遇与挑战

OpenKG 大模型专辑 导读 知识图谱和大型语言模型都是用来表示和处理知识的手段。大模型补足了理解语言的能力,知识图谱则丰富了表示知识的方式,两者的深度结合必将为人工智能提供更为全面、可靠、可控的知识处理方法。在这一背景下,OpenKG组织…

eslint

什么是eslint ESLint 是一个根据方案识别并报告 ECMAScript/JavaScript 代码问题的工具,其目的是使代码风格更加一致并避免错误。 安装eslint npm init eslint/config执行后会有很多选项,按照自己的需求去选择就好,运行成功后会生成 .esli…

bpmnjs Properties-panel拓展(属性设置篇)

最近有思考工作流相关的事情,绘制bpmn图的工具认可度比较高的就是bpmn.js了,是一个基于node.js的流程图绘制框架。初始的框架只实现了基本的可视化,想在xml进行客制化操作的话需要拓展,简单记录下几个需求的实现过程。 修改基础 …

每天一道leetcode:542. 01 矩阵(图论中等广度优先遍历)

今日份题目: 给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 示例1 输入:mat [[0,0,0],[0,1,0],[0,0,0]] 输出&#xff…

java八股文面试[多线程]——指令重排序

关于a的操作,由原来的6个指令,变成了4个指令。 1. 指令重排序的介绍 1)指令重排序的类型 在执行程序时为了提高性能,编译器和处理器常常会对指令做重排序。 重排序分三种类型:编译器优化的重排序 编译器在不改变单线…

分布式一致性协议

在对一个分布式系统进行架构设计的过程中,往往会在系统的可用性和数据一致性之间进行反复的权衡,于是就产生了一系列的一致性协议。为了解决分布式一致性问题,在长期的探索研究过程中,涌现出了一大批经典的一致性协议和算法&#…

SpringMVC 第二天

第 1 章 ModelAttribute 和 SessionAttribute[ 应 用 ] 1.1ModelAttribute 1.1.1 使用说明 作用: 该注解是 SpringMVC4.3 版本以后新加入的。它可以用于修饰方法和参数。 出现在方法上,表示当前方法会在控制器的方法执行之前,先执行…

Open3D 进阶(7)Kmeans++点云聚类

目录 一、算法原理1、原理概述2、实现流程3、参考文献二、代码实现三、结果展示四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、原理概述

【Android-Flutter】我的Flutter开发之旅

目录: 0、文档:1、在Windows上搭建Flutter开发环境(1)[使用中国镜像(❌详细看官方文档)](https://docs.flutter.dev/community/china)(2)[下载最新版Flutter SDK(已包含Dart)](https://docs.flu…

[SQLITE_ERROR] SQL error or missing database (near “=“: syntax error)【已解决】

这个报的错误是语法错误,但是我并没有看出来这行代码有什么错。 通过排除掉下边两个问题解决的 从增加记录方法复制的下来的代码,只删除了关闭自动提交事务,但是connection.commit忘记删除executeQuery和executeUpdate方法的用法忘记了&…

什么是网络取证(Network Forensics)

企业采用新技术来检查其网络安全是否存在零日漏洞,与立即指示问题的物理层不同,黑客攻击尝试可能会被忽视并变得严重,直到对网络流量有一个整体的可见性。通过实时监控来跟踪其源和目标的流量,以查明问题或潜在问题的根源。 什么…

Redis之集群模式

一、Redis集群 一个节点就是一个运行在集群模式下的Redis服务器,Redis服务器在启动时会根据cluster-enabled配置选项是否为yes来决定是否开启服务器的集群模式。 Redis节点不会互相发现,连接各个节点的工作需要使用cluster meet命令来完成 CLUSTER MEE…

Postman API测试之道:不止于点击,更在于策略

引言:API测试的重要性 在当今的软件开发中,API已经成为了一个不可或缺的部分。它们是软件组件之间交互的桥梁,确保数据的流动和功能的实现。因此,对API的测试显得尤为重要,它不仅关乎功能的正确性,还涉及到…

Android屏幕适配(5) — 最小宽度smallWidth适配

概述 最小宽度smallWidth适配实现屏幕适配方案 详细 前言 在之前的文章中,我们讲到了Android屏幕适配的一些知识,大家感兴趣的话可参考Android屏幕适配(1) — 概念解释Android屏幕适配(2) — drawable与mipmapAndroid屏幕适配(3) — 资源文件夹命名与…

C++元编程——深度双向RNN实验

使用C的标准库实现了双向RNN的功能。最近对DRNN做了一些改进&#xff0c;同时进行了实验&#xff0c;首先DRNN的代码如下&#xff1a; #ifndef _RNN_HPP_ #define _RNN_HPP_ #include <stdio.h> #include <stdlib.h> #include <vector> #include "mat.…

爬虫逆向实战(二十五)--某矿采购公告

一、数据接口分析 主页地址&#xff1a;某矿 1、抓包 通过抓包可以发现数据接口是cgxj/by-lx-page 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看“载荷”模块可以发现有一个param的加密参数 请求头是否加密&#xff1f; 无响应是否加密&#xff1f; 无c…

网关认证的技术方案

我们认证授权使用springsecurity 和oauth2技术尽心实现具体实现流程见第五章文档&#xff0c;这里就是记录一下我们的技术方案 这是最开始的技术方案&#xff0c;我们通过认证为服务获取令牌然后使用令牌访问微服务&#xff0c;微服务解析令牌即可。但是缺点就是每个微服务都要…