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 更适合用于简单的数据抓取任务,例如获取网页的基本内容。在实际应用中,根据需求和场景选择合适的库。
 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

flutter调试器查看不了副页面(非主页面/子页面)

刚接触flutter,写了两个页面,通过按钮,可以从主页面跳转到副页面,副页面我自己写的一个独立的dart文件,在主页面的代码中导入使用。但是当我运行代码后,点击跳转的时候,却发现查看不到对应的副页…

Linux驱动入门 —— 利用引脚号操作GPIO进行LED点灯

目录 一、字符设备驱动程序框架 编写驱动程序的步骤: 对于 LED 驱动,我们想要什么样的接口? LED 驱动能支持多个板子的基础:分层思想 二、Linux驱动如何指向一个GPIO 直接通过寄存器来操作GPIO 利用引脚号操作GPIO IMX6UL…

STM32的看门狗(WDG)

WDG(Watchdog)看门狗 看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长时间的罢工状态,保证系统的可靠…

基于C/C++的rapidxml加载xml大文件 - 下部分

下载地址: RapidXml (sourceforge.net)https://rapidxml.sourceforge.net/ 将源码添加到自己的工程中 示例测试大文件耗时: 总共293w行数据,大概耗时不到1s。

Paper Reading: (U2PL) 基于不可靠伪标签的半监督语义分割

目录 简介目标/动机方法Pseudo-LabelingUsing Unreliable Pseudo-Labels 补充知识InfoNCE LossOHEM 实验Comparison with Existing AlternativesAblationEffectiveness of Using Unreliable Pseudo-LabelsAlternative of Contrastive Learning 总结附录U2PL 与 negative learni…

【C语言程序设计】数组程序设计

目录 前言 一、数组的定义和初始化 二、数组的基本操作 三、数组的高级应用 四、程序设计 4.1 程序设计第一题 4.2 程序设计第二题 4.3 程序设计第三题 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助…

论文阅读《DPS-Net: Deep Polarimetric Stereo Depth Estimation》

论文地址:https://openaccess.thecvf.com/content/ICCV2023/html/Tian_DPS-Net_Deep_Polarimetric_Stereo_Depth_Estimation_ICCV_2023_paper.html 概述 立体匹配模型难以处理无纹理场景的匹配,现有的方法通常假设物体表面是光滑的,或者光照是…

设计模式(2)--对象创建(4)--原型

1. 意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 2. 两种角色 抽象原型(Prototype)、具体原型(Concrete Prototype) 3. 优点 3.1 对客户隐藏了具体的产品类 3.2 可以在运行时刻增加和删除产品 3.3 可以极大地减少系统所需要的类的数目 …

Weblogic-CVE-2023-21839

一、漏洞概述 RCE漏洞,该漏洞允许未经身份验证的远程,通过T3/IIOP协议网络访问并破坏WebLogic服务器,成功利用此漏洞可导致Oracle WebLogic服务器被接管,通过rmi/ldap远程协议进行远程命令执行,当 JDK 版本过低或本地存在小工具&…

@Scheduled任务调度/定时任务-非分布式

1、功能概述 任务调度就是在规定的时间内执行的任务或者按照固定的频率执行的任务。是非常常见的功能之一。常见的有JDK原生的Timer, ScheduledThreadPoolExecutor以及springboot提供的Schduled。分布式调度框架如QuartZ、Elasticjob、XXL-JOB、SchedulerX、PowerJob等。 本文…

出现 ‘mvn‘ 不是内部或外部命令,也不是可运行的程序或批处理文件 的解决方法

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 下载了Maven,也配置了环境,在环境变量中配置MAVEN_HOME,在用户变量中配置了bin变量 具体如下所示: 用户变量的配置: 结果显示如下所示: 2. 原理分析 HOME变量中会具体到jre变量,如果在用户变量中配置,jre可能…

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

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

数据结构实验任务八:排序算法的实现与分析

问题描述 统计成绩:给出 n 个学生的考试成绩表,每条信息由姓名和分数组成,试设 计一个算法: 1.按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同 一名次; 2.按名次列出每个学生…

36V/48V转12V 10A直流降压DC-DC芯片-AH1007

AH1007是一款36V/48V转12V 10A直流降压(DC-DC)芯片,它是一种高性能的降压变换器,常用于工业、汽车和电子设备等领域。 AH1007采用了先进的PWM调制技术和开关电源控制算法,能够高效地将输入电压从36V/48V降低到12V&…

【Spark精讲】Spark内存管理

目录 前言 Java内存管理 Java运行时数据区 Java堆 垃圾回收机制 Executor内存管理 内存类型 堆内内存 堆外内存 内存管理模式 静态内存管理 统一内存管理 ​编辑 执行内存管理 多任务间内存分配 Shuffle 的内存占用 MemoryOverHead详解 任务内存调节 错误类型…

TCP/IP 四层体系结构

目录 ​编辑 导言: 应用层 1. HTTP(超文本传输协议) 2. FTP(文件传输协议) 3. SMTP(简单邮件传输协议) 4. POP3(邮局协议第3版) 5. IMAP(互联网消息访…

群晖(Synology)新建存储池使用 Home 服务

每一个用户都可以有一个自己的 Home 服务。 这个在群晖存储新建存储池后可以自动启用这个服务。 启用后,可以看到你的文件系统中有一个 homes 的文件了。 群晖(Synology)新建存储池使用 Home 服务 - 系统容器 - iSharkFly每一个用户都可以有…

尚硅谷JavaWeb电子书城项目(Java+Mysql+Tomcat+Jsp)

自己写的在线电子书城项目,可改写,添加功能,如打折,分类,用户管理,评论等功能。 使用方法: 1.使用idea导入项目。 2.数据库要用项目resource文件里的book.sql文件建立。 3.修改jdbc.properi…

【从零开始学习JVM | 第八篇】学习垃圾回收算法 和 垃圾回收器

前言: 现代编程语言通常采用垃圾回收机制来自动管理内存。垃圾回收机制是一种自动化的内存管理技术,可以在程序运行时自动识别和回收不再使用的内存,从而减少内存泄漏和其他内存相关问题的发生。 本文将介绍垃圾回收算法和垃圾回收器的相关…

【产品】Axure的基本使用(二)

文章目录 一、元件基本介绍1.1 概述1.2 元件操作1.3 热区的使用 二、表单型元件的使用2.1 文本框2.2 文本域2.3 下拉列表2.4 列表框2.5 单选按钮2.6 复选框2.7 菜单与表格元件的使用 三、实例3.1 登录2.2 个人简历 一、元件基本介绍 1.1 概述 在Axure RP中,元件是…