Selenium库自动化测试入门

 前言

为什么要学selenium??前面已经学了requests库我们会发现

对于绝大多数动态渲染的网页来说,用requests进行爬虫比较繁琐。

所以我们还是要学习一下selenium库,以帮助我们更高效的爬取网页。

环境:

pychar 2020.1 x64版本

谷歌浏览器驱动,需要根据自己的谷歌浏览器版本所对应的驱动进行下载。

selenium库,如果没有安装,可以在pychar终端输入 pip install selenium。

这是我没有安装之前的,可以使用pip list命令来查看自己有没有安装selenium库

这是安装之后的,可以看到selenium库已经安装完成了。

下面进行简单的代码测试。咱们用淘宝网址和百度来进行测试。

from selenium import webdriver
import time
from selenium.webdriver.common.by import By
#浏览器驱动
bro=webdriver.Chrome()
#目标网址
bro.get('https://www.taobao.com')
#标签定位
s_input=bro.find_element(By.ID,'q')
#内容(key)输入
s_input.send_keys('java')#标签定位
btn=bro.find_element(By.CLASS_NAME,'btn-search')
#点击事件
btn.click()#垂直滚动2000xp
bro.execute_script('window.scrollTo(0,2000)')
time.sleep(2)
bro.get('https://www.baidu.com')
time.sleep(2)
bro.back()
time.sleep(2)
bro.forward()
time.sleep(2)
bro.quit()#释放内存

最后附录一个比较官方的解释,selenium和requests的区别

Selenium 和 Requests 是两个用于 Web 爬虫和自动化的 Python 库,它们之间有一些主要区别:

1. 工作方式:
   - Selenium:Selenium 是一个自动化测试工具,主要用于模拟用户与浏览器的交互。它通过控制 Web 浏览器(如 Chrome、Firefox)来加载网页并与网页元素进行交互。这使得它能够处理 JavaScript 生成的动态内容和与 Web 页面上的表单、按钮等元素进行交互。
   - Requests:Requests 是一个用于发送 HTTP 请求的库。它可以模拟发送各种类型的请求(如 GET、POST、PUT 等)并处理响应。Requests 主要用于获取网页的 HTML 内容,不能直接处理 JavaScript 生成的动态内容。

2. 性能:
   - Selenium:由于 Selenium 使用真实浏览器加载页面,因此在处理动态内容和需要与页面元素交互的场景下性能较低。此外,使用真实浏览器还需要额外的资源(如浏览器安装、驱动程序等)。
   - Requests:Requests 直接发送 HTTP 请求并获取 HTML 内容,因此性能较高。但是,它不能处理 JavaScript 生成的动态内容。

3. 处理 JavaScript:
   - Selenium:Selenium 可以很好地处理 JavaScript 生成的动态内容。
   - Requests:Requests 无法直接处理 JavaScript 生成的动态内容。但是,可以结合其他库(如 BeautifulSoup、PyQuery 等)来解析 HTML 内容。

4. API 使用:
   - Selenium:Selenium 提供了丰富的 API,可以用于查找、定位和操作网页元素。
   - Requests:Requests 主要用于发送 HTTP 请求和处理响应。它不提供用于查找和操作网页元素的 API。

总之,Selenium 更适合用于需要模拟用户与浏览器交互的场景,例如处理动态内容、与表单和按钮等元素交互。而 Requests 更适合用于简单的数据抓取任务,例如获取网页的基本内容。在实际应用中,根据需求和场景选择合适的库。
 

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

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

相关文章

机器学习算法新手入门指南

AI算法的种类在人工智能领域中非常丰富,而且多样化,AI算法利用数学、统计学和计算机科学等领域的原理和方法,通过模拟人类智能和学习能力来解决各种复杂的问题。 在监督学习领域,我们有经典的线性回归和逻辑回归算法,…

光栅化渲染:可见性问题和深度缓冲区算法

在前面第二章中,我们了解到,在投影点(屏幕空间中的点)的第三个坐标中,我们存储原始顶点 z 坐标(相机空间中点的 z 坐标): 当一个像素与多个三角形重叠时,查找三角形表面上…

Java 多线程之线程安全集合

文章目录 一、概述二、List 接口线程安全实现类2.1 普通 List 变线程安全 List2.2 Vector2.3 CopyOnWriteArrayList 三、Map 接口线程安全实现类3.1 普通 Map 变线程安全 Map3.2 Hashtable3.3 ConcurrentHashMap3.4 ConcurrentSkipListMap 有序/跳表 四、Set 接口线程安全实现类…

J2EE(架构师考试复习资料)

J2EE 是针对 Web Service、业务对象、数据访问和消息报传送的一组规范。这组应用编程接口确定了 Web 应用与驻留它们的服务器之间的通信方式。J2EE 注重两件事,一是建立标准,使 Web 应用的部署与服务器无关;二是使服务器能控制构件的生命周期…

自定义Mybatis LanguageDriver性能优化

场景:高并发情况下mybatis 动态sql 解析 锁问题优化 优化前 并发测试 XMLLanguageDriver 类 的 createSqlSource 方法有锁 而且 每次执行时都会走该方法 优化前 : 线程有Block 优化后的 LanguageDriver public class CustomXMLLanguageDriver im…

大数据机器学习与深度学习——回归模型评估

大数据机器学习与深度学习——回归模型评估 回归模型的性能的评价指标主要有:MAE(平均绝对误差)、MSE(平均平方误差)、RMSE(平方根误差)、R2_score。但是当量纲不同时,RMSE、MAE、MSE难以衡量模型效果好坏,这就需要用到R2_score。 平均绝对…

Python实现多种图像锐化方法:拉普拉斯算子和Sobel算子

Python实现多种图像锐化方法:拉普拉斯算子和Sobel算子 图像和视频逐渐成为人们生活中信息获取的重要来源,而图像和视频在传输过程中有很多因素可能造成图像模糊,比如不正确的聚焦会产生离焦模糊,景物和照相机的相对运动会造成运动…

GBASE南大通用携手宇信科技打造“一表通”全链路解决方案

什么是“一表通”? “一表通”是国家金融监督管理总局为发挥统计监督效能、完善银行保险监管统计制度、推进监管数据标准化建设、打破数据壁垒,而制定的新型监管数据统计规范。相较于以往的报送接口,“一表通”提高了对报送时效性、校验准确性…

java集合的迭代器与遍历

文章目录 迭代器Iterator1、什么是Iterator2,iterator接口的API3、Irerator()方法细节解释4. Irerator的原理示意图5. forEach循环与Iterator遍历的区别与联系 ListIterator1.ListIterator的概述(1) 概念(2) 解析 2.ListIterator的生成3.ListIterator的API4.ListIte…

【从零开始学习JVM | 第九篇】了解 常见垃圾回收器

前言: 垃圾回收器(Garbage Collector)是现代编程语言中的一项重要技术,它提供了自动内存管理的机制,极大地简化了开发人员对内存分配和释放的繁琐工作。通过垃圾回收器,我们能够更高效地利用计算机的内存资…

selenium+python自动化测试 —— 解决无法启动IE浏览器及报错问题!

前言:记录启动IE浏览器的报错及解决方法。 错误1: selenium.common.exceptions.WebDriverException: Message: IEDriverServer.exe executable needs to be in PATH. Please download from http://selenium-release.storage.googleapis.com/index.html…

【C语言:动态内存管理】

文章目录 前言1.malloc2.free3.calloc4.realloc5.动态内存常见错误6.动态内存经典笔试题分析7.柔性数组8.C/C中的内存区域划分 前言 文章的标题是动态内存管理,那什么是动态内存管理?为什么有动态内存管理呢? 回顾一下以前学的知识&#xff…

SpringBoot+Vue3前后端快速整合入门

前言 最近需要维护一个个人项目,由于笔者是一个大后端,所以借此机会把前端学习过程记录一下,方便后续回顾。 前端项目初始化 安装npm 在前端项目初始化时,我们必须要安装好node,官网地址如下,因为笔者后…

1.【Multisim仿真】数电模电学习,仿真软件的初步使用

学习计划路径: >Multisim电路仿真软件熟练掌握 >数字电路基础课程 >逻辑电路设计与应用 >熟练掌握存储器、脉冲波形发生器、D/A和A/D转换器原理 >基本元器件熟练掌握 >晶体管放大电路及负反馈放大电路 >集成运算放大器设计 >电压变电流电路…

解决GateWay报错:Exceeded limit on max bytes to buffer : 262144

场景: 前端传来了一个大的字符串 发现请求不通 一番调试发现SpringGateway 默认内存缓冲区262144字节 网上查了很多种常见的解决方案无效之后 直接重写底层 网友的解决方案 方案1(无效) 直接修改缓冲区大小 spring:codec:max-in-memory-s…

【STM32】STM32学习笔记-LED闪烁 LED流水灯 蜂鸣器(06-2)

00. 目录 文章目录 00. 目录01. GPIO之LED电路图02. GPIO之LED接线图03. LED闪烁程序示例04. LED闪烁程序下载05. LED流水灯接线图06. LED流水灯程序示例07. 蜂鸣器接线图08. 蜂鸣器程序示例09. 下载10. 附录 01. GPIO之LED电路图 电路图示例1 电路图示例2 02. GPIO之LED接线图…

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品

目录 一、实验 1.GitLab本地导入前后端项目 2.Jenkins新建前后端项目流水线 3.Sonarqube录入质量阈与质量配置 4.修改GitLab共享库代码 5.Jenkins手动构建前后端项目流水线 6.Nexus查看制品上传情况 7.优化代码获取RELEASE分支 8.优化Jenkins流水线项目名称 一、实验 …

计算机网络:数据链路层(网桥)

带你速通计算机网络期末 目录 一、冲突域和广播域 二、网桥介绍 三、网桥分类—―透明网桥 四、网桥分类―—源路由网桥 五、多接口网桥―—以太网交换机 总结 一、冲突域和广播域 冲突域:在同一个冲突域中的每一个节点都能收到所有被发送的帧。简单的说就是同一时间内只…

华为数通---配置基本QinQ示例

QinQ简介 定义 QinQ(802.1Q-in-802.1Q)技术是一项扩展VLAN空间的技术,通过在802.1Q标签报文的基础上再增加一层802.1Q的Tag来达到扩展VLAN空间的功能,可以使私网VLAN透传公网。由于在骨干网中传递的报文有两层802.1Q Tag&#x…

MySQL之DQL语句

DQL语句 DQL(Data Query Language)查询数据 操作查询:select简单的查询,复杂的查询数据库中最核心的语言,最重要的语句使用频繁的语句 指定查询 查询全部 语法: select 全部字段(*&#x…