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

news2024/11/16 7:37:52

接上篇《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.coloradmin.cn/o/1063717.html

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

相关文章

在conda虚拟环境下安装PyTorch-gpu版本

conda环境配置 在conda虚拟环境下安装PyTorch-gpu版本1. 下载好anaconda以及CUDA2. 创建并进入虚拟环境 选择python版本3. 找对python torch torchvision cuda的对应版本 并 下载安装4. 测试是否成功5. 参考资料 在conda虚拟环境下安装PyTorch-gpu版本 引言: 学会在…

操作系统实践课程结课报告

操作系统实践课程结课报告 目标:Write your own OS in C 作者:我也需要被治愈(学号:hello os) 日期:2023年7月20日 个人觉得这个过程还是蛮有意思的,初步了解了有关的一些内容顺带复习了操作系…

运营人必备这个微信运营工具

微信管理系统CRM在各行各业都有应用的场景---IT互联网、制造业、商业服务、金融投资、教育培训、房产家装、电商、政务等20行业领域均得到广泛应用。 微信CRM管理系统的主要功能: 多个微信号聚合聊天:解决多个微信来回切换,换着手着手机的麻烦…

PHP 行事准则:allow_url_fopen 与 allow_url_include

文章目录 参考环境allow_url_fopenallow_url_fopen 配置项操作远程文件file 协议 allow_url_includeallow_url_include 配置项 allow_url_include 与 allow_url_fopen区别联系默认配置配置项关闭所导致异常运行时配置ini_set()限制 参考 项目描述搜索引擎Bing、GoogleAI 大模型…

VulnHub Earth

一、信息收集 1.主机和端口扫描 nmap -sS 192.168.103.1/24 发现443端口有DNS解析,在hosts文件中添加DNS解析: 2.收集earth.local信息 发现有Previous Messages 37090b59030f11060b0a1b4e0000000000004312170a1b0b0e4107174f1a0b044e0a000202134e0a161…

Verilator: sh: 1: exec: < PATHNAME >: not found

事出有因 I assumed that I install verilator via git clone its source, so I need to set the export VERILATOR_ROOT. At first, due to laziness, I just copy the code directly to my ubuntu. so stupid I am!!! Then, I recoginzed that the pathname is not real, …

Opengl之立方体贴图

简单来说,立方体贴图就是一个包含了6个2D纹理的纹理,每个2D纹理都组成了立方体的一个面:一个有纹理的立方体。你可能会奇怪,这样一个立方体有什么用途呢?为什么要把6张纹理合并到一张纹理中,而不是直接使用6个单独的纹理呢?立方体贴图有一个非常有用的特性,它可以通过一…

HTML5+CSS3+移动web 前端开发入门笔记(一)

千古前端图文教程 千古前端图文教程 git的使用 Git是一个分布式版本控制系统,它的作用主要包括以下几个方面: 版本管理:Git可以跟踪文件的修改历史,记录每次提交的内容、时间和作者等信息。通过Git,开发人员可以轻…

波奇学C++:红黑树

红黑树性质: 1.每个结点不是红色就是黑色。 2.根节点是黑色 3.如果一个节点是红色,它的两个孩子必须是黑色 4.对于每个节点,从该结点到其所有后代叶结点的简单路径上,均包含相同数目的黑色结点 5.每个叶结点都是黑色的&#xff08…

主机ping不通虚拟机,虚拟机可以ping同主机

问题:主机ping不通虚拟机 虚拟机可以ping通主机(192.168.43.140)和外网(www.baidu.com) 解决方法: 1.打开【控制面板】-->【网络和Internet】-->【网络连接】 2.选择VMnet8 右键【属性】 3.修改 IP地址(I)和 子…

1、内核加载模块

一、静态加载 1、新功能源码与内核源码一起编译进uImage文件内 新功能源码与Linux内核源码在同一目录结构下在linux-3.14/drivers/char/目录下编写hello.c文件&#xff0c;内容如下 #include <linux/module.h> #include <linux/kernel.h>int __init myhello_ini…

oracle OCP OCM MySQL OCP认证难吗?

好多人在初次考OCP时&#xff0c;不知道如何选择&#xff0c;本文让姚远ACE老师为大家总结一下吧&#xff01; 选择OCP认证时要注意的问题&#xff1a; 1&#xff0c;授课老师师资经验&#xff08;非常重要&#xff09; 2&#xff0c;课程大纲 3&#xff0c;试听课程 4&am…

零食食品经营小程序商城的作用是什么

零食几乎可以涵盖每个年龄阶段&#xff0c;同时又是市场中常见的零售批发商品&#xff0c;在多个场景中都有销售/购买属性&#xff0c;对消费者来说&#xff0c;购买零食的渠道多种多样&#xff0c;无论线下还是线上&#xff0c;都可随心而购。 庞大市场升级促进下&#xff0c…

医学影像归档与通讯系统(PACS)系统源码 PACS三维图像后处理技术

医学影像归档与通讯系统&#xff08;PACS&#xff09;系统源码 PACS三维图像处理 医学影像归档与通讯系统&#xff08;PACS&#xff09;系统&#xff0c;是一套适用于从单一影像设备到放射科室、到全院级别等各种应用规模的医学影像归档与通讯系统。PACS集患者登记、图像采集、…

国庆特别篇:中秋与国庆同日相迎

国庆特别篇&#xff1a;中秋与国庆同日相迎 国庆特别篇&#xff1a;中秋与国庆同日相迎 &#x1f389;摘要引言旅途风景分享 &#x1f5fa;️中秋团圆&#xff0c;返乡之路风景宜人的旅游胜地 技术探讨&#xff1a;Java中的可变参数 &#x1f680;什么是可变参数&#xff1f;使…

RabbitMQ集群搭建详细介绍以及解决搭建过程中的各种问题——实操型

RabbitMQ集群搭建详细介绍以及解决搭建过程中的各种问题——实操型 1. 准备工作1.1 安装RabbitMQ1.2 简单部署搭建设计1.3 参考官网 2. RabbitMQ 形成集群的方法3. 搭建RabbitMQ集群3.1 部署架构3.2 rabbitmq集群基础知识3.2.1 关于节点名称&#xff08;标识符&#xff09;3.2.…

《操作系统真象还原》 第 01 章 部署工作环境 学习笔记

0. 内容说明 本内容依据《操作系统真象还原》进行学习&#xff0c;在学习过程中&#xff0c;由于新版本和旧版本bochs存在参数差异&#xff0c;故此会出现一些调试错误。也记录对应的解决方案。 1. 需要的编译器 对于现代OS来说&#xff0c;主要使用 C语言 和 汇编语言 两种…

剑指offer——JZ26 树的子结构 解题思路与具体代码【C++】

一、题目描述与要求 树的子结构_牛客题霸_牛客网 (nowcoder.com) 题目描述 输入两棵二叉树A&#xff0c;B&#xff0c;判断B是不是A的子结构。&#xff08;我们约定空树不是任意一个树的子结构&#xff09; 假如给定A为{8,8,7,9,2,#,#,#,#,4,7}&#xff0c;B为{8,9,2}&…

【智能家居项目】裸机版本——字体子系统 | 显示子系统

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《智能家居项目》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 今天实现上图整个项目系统中的字体子系统和显示子系统。 目录 &#x1f004;设计思路&#x1…

无法启动此程序,因为计算机中“找不到msvcp140.dll”的解决方法

msvcp140.dll是Microsoft Visual C 2015 Redistributable的一个动态链接库文件&#xff0c;它是许多基于Visual Studio开发的应用程序和游戏的必要组件。当计算机上缺失msvcp140.dll文件时&#xff0c;可能会导致以下问题&#xff1a; 1. 程序无法启动&#xff0c;提示“找不到…