【Python从入门到进阶】38、selenium关于Chrome handless的基本使用

接上篇《37、selenium关于phantomjs的基本使用》
上一篇我们介绍了有关phantomjs的相关知识,但由于selenium已经放弃PhantomJS,本篇我们来学习Chrome的无头版浏览器Chrome Handless的使用。

一、Chrome Headless简介

Chrome Headless是一个无界面的浏览器环境,它是Google Chrome浏览器在59版本之后新增的一种运行模式。与传统的浏览器不同,Chrome Headless可以在后台执行网页操作,而无需显示可见的用户界面。

Chrome Headless提供了一种方便的方式来进行自动化测试、网络爬虫和数据抓取等任务。它通过模拟用户在浏览器中的行为,实现了对网页的自动化操作和交互。在执行过程中,Chrome Headless可以访问和操纵网页的DOM结构、执行JavaScript代码、提交表单、点击按钮等。

由于没有可见的界面,Chrome Headless相比传统浏览器具有一些优势。首先,它更轻量级,节省了系统资源,并且执行速度更快。其次,它稳定性高,不受弹窗、广告或其他干扰因素的影响。此外,Chrome Headless还提供了丰富的调试工具和API,方便开发者进行调试和监控。

使用Selenium框架结合Chrome Headless可以实现自动化测试和网页爬虫等应用场景。开发人员可以利用Selenium的API来编写脚本,控制Chrome Headless执行各种操作,并获取网页内容和处理结果。

二、Chrome Headless安装及使用

1、环境确认

我们使用Chrome Headless之前,首先要确认一下相应的环境是否满足:
(1)Chrome浏览器版本
Unix\Linux操作系统环境下,浏览器版本需要>=59;
Windows操作系统环境下,浏览器版本需要>=60;
(2)软件和框架版本
Python版本>=3.6
Selenium版本>=3.4.*
ChromeDriver>=2.31

2、安装Python和Selenium库

确保我们已经安装了Python,并安装了Selenium库。可以使用命令pip install selenium来进行Selenium库的安装。

3、谷歌浏览器驱动安装

需要安装ChromeDriver,这个我们在学习Selenium框架之前就已经安装过了,这里不再赘述,需要的同学请查看博文《34、selenium基本概念及安装流程》中有关“下载浏览器驱动”的章节。

4、Chrome Headless的使用

和之前使用PhantomJS不同,Chrome Headless已经内置到我们之前下载好的ChromeDriver驱动程序中了,我们只需要设置一下创建ChromeDriver对象的参数即可,将模式改为Headless模式,即可调用Chrome的无头浏览器了。整体需要以下三步:
(1)创建ChromeOptions对象,配置Chrome Headless选项

options = Options()
# 设置Chrome为Headless模式
options.add_argument("--headless")  
# 禁用GPU加速
options.add_argument("--disable-gpu")  

(2)创建Chrome WebDriver对象,传入ChromeOptions对象

driver = webdriver.Chrome(options=options)

然后使用driver调用需要的API方法即可。

5、Python调用示例

这里以使用Chrome Headless打开百度页面获取其标题为例:

from selenium import webdriver  # 导入selenium的webdriver模块
from selenium.webdriver.chrome.options import Options  # 导入ChromeOptions模块# 创建ChromeOptions对象,配置Chrome Headless选项
options = Options()
options.add_argument("--headless")  # 设置Chrome为Headless模式
options.add_argument("--disable-gpu")  # 禁用GPU加速# 创建Chrome WebDriver对象,传入ChromeOptions对象
driver = webdriver.Chrome(options=options)try:# 打开网页driver.get("https://www.baidu.com")print(driver.title)  # 打印页面的标题finally:# 关闭浏览器driver.quit()

效果:

三、Chrome Headless代码实例

和上一篇一样,我们这次通过Chrome Headless来获取百度搜索‘我要学python’的第一个非广告结果,代码如下:

# _*_ coding : utf-8 _*_
# @Time : 2023-10-06 9:04
# @Author : 光仔December
# @File : Selenium+ChromeHandless测试
# @Project : Python基础from selenium import webdriver  # 导入selenium的webdriver模块
from selenium.webdriver.chrome.options import Options  # 导入ChromeOptions模块
from selenium.webdriver.common.by import By  # 引入By类选择器# 创建ChromeOptions对象,配置Chrome Headless选项
options = Options()
options.add_argument("--headless")  # 设置Chrome为Headless模式
options.add_argument("--disable-gpu")  # 禁用GPU加速# 创建Chrome WebDriver对象,传入ChromeOptions对象
driver = webdriver.Chrome(options=options)try:# 打开网页driver.get("https://www.baidu.com")print(driver.title)  # 打印页面的标题# (1)通过ID定位百度搜索的按钮element1 = driver.find_element(By.ID, "su")# (2)通过名称定位元素(百度的搜索输入框)element2 = driver.find_element(By.NAME, "wd")# 给输入框输入字符串“我要学python”element2.send_keys("我要学python")element1.click()  # 点击搜索# 使用浏览器隐式等待3秒driver.implicitly_wait(3)resultObj = driver.find_element(By.XPATH, "//div[@id=\"content_left\"]//div[@id=\"1\"]")url = resultObj.get_attribute("mu")aObj = resultObj.find_element(By.TAG_NAME, "a")text = aObj.text# 获取print("搜索‘我要学python’的第一个非广告结果:")print("结果标题:", text)print("地址链接:", url)finally:# 关闭浏览器driver.quit()

效果:

参考:尚硅谷Python爬虫教程小白零基础速通教学视频
转载请注明出处:https://guangzai.blog.csdn.net/article/details/133611724

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

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

相关文章

Kaggle - LLM Science Exam(二):Open Book QAdebertav3-large详解

文章目录 前言:优秀notebook介绍三、Open Book Q&A3.1 概述3.2 安装依赖,导入数据3.3 数据预处理3.3.1 处理prompt3.3.2 处理wiki数据 3.4 使用faiss搜索获取匹配的Prompt-Sentence Pairs3.5 查看context结果并保存3.6 推理3.6.1 加载测试集3.6.2 定…

[Unity]GPU Instance 如何将人形Animator动画保存到图片里

参考: GitHub - tkonexhh/RenderHugeByGPUInstanceCreating shaders that support GPU instancing - Unity 手册Animator-Play - Unity 脚本 APIUnity-Animator深入系列---API详解-CSDN博客Unity 获取当前动画播放的帧_unity获取当前动画播放到第几帧-CSDN博客http…

C语言练习百题之排序算法

题目:C语言实现排序算法 冒泡排序 思路&#xff1a; 依次比较相邻的元素&#xff0c;如果顺序不对则交换&#xff0c;直到整个数组有序。 实现代码&#xff1a; #include <stdio.h>void bubbleSort(int arr[], int n) {for (int i 0; i < n - 1; i) {for (int j…

FFmpeg 基础模块:AVIO、AVDictionary 与 AVOption

目录 AVIO AVDictionary 与 AVOption 小结 思考 我们了解了 AVFormat 中的 API 接口的功能&#xff0c;从实际操作经验看&#xff0c;这些接口是可以满足大多数音视频的 mux 与 demux&#xff0c;或者说 remux 场景的。但是除此之外&#xff0c;在日常使用 API 开发应用的时…

低代码平台如何借助Nginx实现网关服务

摘要&#xff1a;本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 在典型的系统部署架构中&#xff0c;应用服务器是一种软件或硬件系统&#xff0c…

在VS Code中优雅地编辑csv文件

文章目录 Rainbow csv转表格CSV to Tablecsv2tableCSV to Markdown Table Edit csv 下面这些插件对csv/tsv/psv都有着不错的支持&#xff0c;这几种格式的主要区别是分隔符不同。 功能入口/使用方法Rainbow csv按列赋色右键菜单CSV to Table转为ASCII表格指令CSV to Markdown …

C++(反向迭代器)

前言&#xff1a; 上一章我们介绍了适配器&#xff0c;也提了一下迭代器适配器&#xff0c;今天我们就从反向迭代器把迭代器适配器给解释一下。 既然 都叫迭代器容器了 就说名只要接口合适他可以封装实现各种容器需求包括vector list 。 目录 1.反向迭代器设计 1.1反向迭代…

模型压缩部署概述

模型压缩部署概述 一&#xff0c;模型在线部署 1.1&#xff0c;深度学习项目开发流程 1.2&#xff0c;模型训练和推理的不同 二&#xff0c;手机端CPU推理框架的优化 三&#xff0c;不同硬件平台量化方式总结 参考资料 一&#xff0c;模型在线部署 深度学习和计算机视觉…

windows 任务计划自动提交 笔记到github 、gitee

一、必须有个git仓库托管到git上。 这个就不用说了&#xff0c;自己在github或者码云上新建一个仓库就行了。 二、创建自动提交脚本 这个bat脚本是在windows环境下使用的。 注意&#xff1a;windows定时任务下 调用自动提交git前&#xff0c;必须先进入该git仓库目录&#x…

R语言实现竞争风险模型(1)

#竞争风险模型 tmp <- data.frame(gene tiaoxuan[,5:6],OS.Time Train[,"Survival_months"], OS Train[,"CSS"],stringsAsFactors F) colnames(tmp) #方法1&#xff1a;riskregression library(riskRegression) fgr1<-FGR(Hist(OS.Time,OS)~gen…

分页处理 - 若依cloud -【 129 】

129 分页功能实现详解 | RuoYi 前端采用基于bootstrap的轻量级表格插件bootstrap-table(opens new window)后端采用基于mybatis的轻量级分页插件pageHelper(opens new window) 提示&#xff1a; 前后端分页实现流程 一 前端 1 element-ui提供了el-pagination&#xff0c;可以…

法国乐天下单支付流程,自养号测评技术环境揭秘。

Rakuten的前身是PriceMinister一家法国公司&#xff0c;经营电子商务网站PriceMinister&#xff0c;按访问量计算&#xff0c;该网站是法国第五大电子商务网站。2010年&#xff0c;它被乐天公司收购&#xff0c;2018年&#xff0c;它更名为Rakuten。乐天法国Rakuten France&…

小谈设计模式(17)—状态模式

小谈设计模式&#xff08;17&#xff09;—状态模式 专栏介绍专栏地址专栏介绍 状态模式关键角色上下文(Context)抽象状态(State)具体状态(Concrete State) 核心思想Java程序实现首先&#xff0c;我们定义一个抽象状态类 State&#xff0c;其中包含一个处理请求的方法 handleRe…

【开发篇】十七、消息:模拟订单短信通知

文章目录 1、消息2、JMS3、AMQP4、案例&#xff1a;模拟订单短信通知 相关文章&#xff1a; 【同步通讯与异步通讯】 1、消息 消息的发送方&#xff0c;即生产者。消息的接收方&#xff0c;即消费者。同步通信就行打视频&#xff0c;等着对方接电话才能继续往下&#xff0c;而…

Go通过reflect.Value修改值

到目前为止&#xff0c;反射还只是程序中变量的另一种读取方式。然而&#xff0c;在本节中我们将重点讨论如何通过反射机制来修改变量。 回想一下&#xff0c;Go语言中类似x、x.f[1]和*p形式的表达式都可以表示变量&#xff0c;但是其它如x 1和f(2)则不是变量。一个变量就是一…

间隔分区 Interval Partition partition_name, interva

分区(Partition)一直是Oracle数据库引以为傲的一项技术&#xff0c;正是分区的存在让Oracle高效的处理海量数据成为可能&#xff0c;在Oracle 11g中&#xff0c;分区技术在易用性和可扩展性上再次得到了增强。在10g的Oracle版本中&#xff0c;要对分区表做调整&#xff0c;尤其…

QSqlTableModel使用简介

QSqlTableModel可以和QTableView共同使用&#xff0c;只需对QSqlTableModel类操作就可以实现读写数据库&#xff0c; 同时将数据显示在tableview中&#xff0c;相同的更改tableview中的值也可以直接同步到数据库中。QSqlTableModel类使用注意&#xff1a; QSqlTableModel::setH…

微服务moleculer03

1. Moleculer 目前支持SQLite&#xff0c;MySQL&#xff0c;MariaDB&#xff0c;PostgreSQL&#xff0c;MSSQL等数据库&#xff0c;这里以mysql为例 2. package.json 增加mysql依赖 "mysql2": "^2.3.3", "sequelize": "^6.21.3", &q…

Dijkstra 邻接表表示算法 | 贪心算法实现--附C++/JAVA实现源码

以下是详细步骤。 创建大小为 V 的最小堆,其中 V 是给定图中的顶点数。最小堆的每个节点包含顶点编号和顶点的距离值。 以源顶点为根初始化最小堆(分配给源顶点的距离值为0)。分配给所有其他顶点的距离值为 INF(无限)。 当最小堆不为空时,执行以下操作: 从最小堆中提取…

MIPI接口协议及规范理解

什么是MIPI接口 MIPI&#xff0c;英文全称为Mobile Industry Processor Interface&#xff0c;即移动行业处理器接口。它是MIPI联盟发起的为移动应用处理器制定的开放标准。MIPI接口是一种专为移动设备和嵌入式系统设计的串行通信接口&#xff0c;定义了一系列的接口标准&…