【Python从入门到进阶】37、selenium关于phantomjs的基本使用

news2024/12/28 5:16:37

接上篇《36、Selenium 动作交互》
上一篇我们介绍了selenium操作网页的动作内容。本篇我们来学习有关phantomjs的相关知识。

一、selenium的缺点

在介绍PhantomJS之前,让我们先讨论一下直接使用Selenium的一些缺点。

1、显示浏览器窗口:Selenium通常需要一个真实的浏览器窗口来执行测试或爬虫任务。这就意味着它会打开一个可见的浏览器窗口,这可能不是理想的选择,因为大部分同学都希望在后台运行这些自动化任务。

2、速度较慢:由于Selenium模拟了浏览器的交互行为,它可能比其他工具执行相同的任务更慢,尤其是在大规模数据爬取或测试方面。

3、内存占用高:Selenium驱动真实的浏览器窗口,因此它需要占用大量内存资源。如果你需要同时运行多个并发任务,这可能会导致内存消耗过高,影响性能。

此时,我们就需要使用“无头浏览器”来解决这些问题。那么,什么是“无头浏览器”呢?
无头浏览器就是Web浏览器在没有图形用户界面的情况下。此程序的行为与浏览器类似,但不会显示任何GUI。
无头驱动程序的一些示例包括:

● HtmlUnit
● Ghost
● PhantomJS
● ZombieJS
● Watir-WebDriver

在本篇博客,我们将先来介绍phantomjs。

二、phantomjs介绍及价值

让我们看看PhantomJS如何解决上述问题,以及为什么它具有价值的。

PhantomJS是一个基于WebKit的无界面浏览器,它可以通过命令行或脚本进行控制和操作,而无需显示实际浏览器窗口。这使得PhantomJS在以下方面具有优势:

1、无界面操作:PhantomJS在后台执行任务,没有可见窗口,这对于需要在服务器或自动化环境中运行的任务非常有用。你可以在无需人工干预的情况下执行自动化测试、网页截图、数据爬取等操作。
2、快速执行:由于PhantomJS不需要显示浏览器窗口,它通常比使用Selenium的方法更快。它可以以较高的速度加载和渲染页面,从而提高您的自动化任务的效率。
3、较低的内存消耗:相比于Selenium驱动实际浏览器窗口,PhantomJS通常需要更少的内存资源。这使得它在需要同时处理多个任务或大规模数据爬取时更具优势。

综上所述,PhantomJS通过提供无界面浏览器的功能,解决了Selenium直接使用的一些缺点。它能够在后台执行任务,加快执行速度,并且占用较少的内存资源。这使得PhantomJS成为一个强大的工具,适用于自动化测试、网络爬虫、屏幕截图等各种应用场景。

这样看来,如果我们把Selenium和PhantomJS结合在一起,就可以运行一个非常强大的网络爬虫了,这个爬虫可以处理JavaScrip、Cookie、headers,以及任何我们真实用户需要做的事情。

三、PhantomJS的工作原理

1、WebKit引擎


PhantomJS是一个基于WebKit的无界面浏览器,而WebKit是一个开源的浏览器引擎,被PhantomJS用于解析和渲染网页内容。
WebKit是一个跨平台的Web浏览器引擎,苹果的Safari、谷歌的Chrome浏览器都是基于这个框架来开发的。WebKit还支持移动设备和手机,包括iPhone和Android手机都是使用WebKit做为浏览器的核心。
WebKit负责处理HTML、CSS和JavaScript,并将它们转化为可视化的网页。它具有优秀的兼容性和高性能,是许多主流浏览器所采用的核心引擎之一。

2、页面加载和渲染流程

下面是PhantomJS利用WebKit浏览器引擎在后台进行网页加载和渲染的过程:

(1)发起网络请求

PhantomJS通过网络协议(如HTTP和HTTPS)向服务器发送请求,获取网页内容。

(2)HTML解析和DOM树构建

接收到网页内容后,PhantomJS进行HTML解析,将HTML文档转换为DOM树结构。
DOM树代表了网页的结构,每个元素都对应着DOM节点,可以通过节点进行操作和访问。

(3)样式处理和布局计算

PhantomJS处理CSS样式信息,匹配选择器与DOM节点,计算最终的样式结果。
样式信息包括字体、颜色、大小等,对页面外观和布局起着重要作用。

(4)页面渲染和资源加载

将DOM树和样式信息合成为最终的渲染结果。
渲染过程包括布局计算、绘制元素、处理图像等,将网页呈现给用户。
同时,PhantomJS会加载页面所需的资源,如图片、脚本和样式表等。

(5)JavaScript执行

PhantomJS支持JavaScript的执行,它能够对页面进行交互和动态效果的实现。
执行JavaScript代码可以触发事件、修改DOM内容等。

(6)渲染结果呈现

最终渲染结果可以在屏幕上显示给用户,也可以进行进一步处理,如截图、数据提取等操作。

四、PhantomJS的使用步骤及示例

1、安装和配置

PhantomJS官网下载地址:https://phantomjs.org/download.html
下载完毕后,解压压缩包,将文件夹放在我们python安装文件夹的下面:

进入bin文件夹,然后复制上面的路径,桌面右击我的电脑选择属性:

点击高级环境设置:

点击环境变量:

在下面的系统变量中找到Path并双击:

点击新建,将之前复制的bin的全路径粘贴进去,依次点击确定,完成配置:

然后打开cmd,输入phantomjs,按回车如果结果为下图则安装正确:

下面我们就可以使用phantomjs了。

2、在python中测试phantomjs

编写以下代码,使用PhantomJS浏览器打开百度:

# _*_ coding : utf-8 _*_
# @Time : 2023-09-23 11:45
# @Author : 光仔December
# @File : PhantomJS样例
# @Project : Python_Projects

from selenium import webdriver

browser = webdriver.PhantomJS()  # 初始化浏览器
# 发送请求
browser.get('https://www.baidu.com/')  
print(browser.title)  # 打印页面的标题
# 退出模拟浏览器
browser.quit()  # 一定要退出!不退出会有残留进程

能够正常显示百度的标题,证明环境安装成功:

这里注意,新版的selenium已经放弃PhantomJS(两家分手了,官方推荐我们用Chrome或Firefox的无头版本来替代),所以可能会出现下面的报错:
AttributeError: module 'selenium.webdriver' has no attribute 'PhantomJS'

这里如果我们想要测试,需要把selenium版本降低(一般是2.48.0)。
通过pip show selenium显示当前的默认安装版本(我是4.12.0,先降级吧= =)。
先执行删除新版本

pip uninstall selenium

再安装指定版本

pip install selenium==2.48.0

3、使用phantomjs的步骤

(1)首先,确保你已经安装了Selenium和PhantomJS,并将它们添加到你的项目中。
(2)导入相应的包:

from selenium import webdriver

(3)创建一个PhantomJS的WebDriver实例:

driver = webdriver.PhantomJS()

(4)使用WebDriver打开网页:

driver.get("http://example.com")

(5)进行其他的操作,比如查找元素、点击按钮等:

element = driver.find_element_by_id("my-element")
element.click()

(6)最后,记得关闭WebDriver:

driver.quit()

这些代码将创建一个PhantomJS的WebDriver实例,并通过该实例控制浏览器行为。大家可以根据自己的需求,在代码中添加更多的操作和逻辑。请注意,从Selenium 4开始,PhantomJS被废弃了,建议使用基于Chrome的Headless模式代替。

4、实例

我们通过selenium操作PhantomJS模拟浏览器行为,百度搜索“我要学python”,获取第一个非广告的搜索结果,打印其标题和链接地址:

代码如下:

# _*_ coding : utf-8 _*_
# @Time : 2023-09-23 11:45
# @Author : 光仔December
# @File : PhantomJS样例
# @Project : Python_Projects

from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.PhantomJS()  # 初始化浏览器
# 发送请求
browser.get('https://www.baidu.com/')
print(browser.title)  # 打印页面的标题
# (1)通过ID定位百度搜索的按钮
element1 = browser.find_element(By.ID, "su")
# (2)通过名称定位元素(百度的搜索输入框)
element2 = browser.find_element(By.NAME, "wd")
# 给输入框输入字符串“我要学python”
element2.send_keys("我要学python")
element1.click()  # 点击搜索
# 使用浏览器隐式等待3秒
browser.implicitly_wait(3)
resultObj = browser.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)
# 退出模拟浏览器
browser.quit()  # 一定要退出!不退出会有残留进程

效果:

PS:搞完了,我赶紧把selenium升级回4.12.0版本,以免影响后面新技术的学习= =。

由于selenium已经放弃PhantomJS,下一篇我们使用Chrome的无头版本来代替,学习Chrome的Handless无头浏览器的使用。

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

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

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

相关文章

管理类联考——数学——汇总篇——知识点突破——几何——平面几何——记忆

文章目录 整体记忆宫殿角度/分类/串联线——从小到大角度/分类/串联线2——求长度,面积,角度 局部数字编码口诀法五大模型/共角定理、风筝模型、蝴蝶模型 转化图像法特点法公式推导法:公式推导掌握数学公式射影定理共角定理燕尾定理蝴蝶定理/…

Mysql高级——数据库设计规范(1)

数据库设计规范 1. 为什么需要数据库设计 数据库设计是为了有效地组织和管理数据。它是一个重要的步骤,用于创建一个结构良好、高效和可靠的数据库系统。以下是一些需要数据库设计的原因: 数据组织:数据库设计帮助我们将数据按照一定的结构…

Android 引入FFmpeg

1.安装 CMake 首先,需要下载 CMake 相关工具,在 Android Studio 中依次点击 Tools->SDK Manager->SDK Tools ,然后勾选 CMake : CMake 构建工具 NDK : NDK 环境 最后依次点击 OK->OK->Finish ,开始下载&#xff0…

科技资讯|苹果获批手机“Touch Bar”新专利,苹果Find My依旧火爆

根据美国商标和专利局(USPTO)公示的清单,苹果获得了一项 iPhone 专利,在机身侧面装上一个“Touch Bar”,用于显示电量等信息,并支持相关的交互操作。 这项专利最早于 2011 年提交,并于 2014 年…

OJ练习第180题——颠倒二进制位

颠倒二进制位 力扣链接:190. 颠倒二进制位 题目描述 颠倒给定的 32 位无符号整数的二进制位。 提示: 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指…

FPGA 图像缩放 千兆网 UDP 网络视频传输,基于B50610 PHY实现,提供工程和QT上位机源码加技术支持

目录 1、前言版本更新说明免责声明 2、相关方案推荐UDP视频传输--无缩放FPGA图像缩放方案我这里已有的以太网方案 3、设计思路框架视频源选择IT6802解码芯片配置及采集动态彩条跨时钟FIFO图像缩放模块详解设计框图代码框图2种插值算法的整合与选择 UDP协议栈UDP视频数据组包UDP…

Spring | 异常处理最佳实践

引言 在快速迭代和持续交付的今天,软件的健壮性、可靠性和用户体验已经成为区别成功与否的关键因素。特别是在Spring框架中,由于其广泛的应用和丰富的功能,如何优雅地处理异常就显得尤为重要。本文旨在探讨在Spring中如何更加高效、准确和优…

【设计模式】组合模式

文章目录 1.组合模式定义2.组合模式的结构2.1. 安全式组合模式的结构2.2.透明式组合模式的结构 3.组合模式实战案例3.1.场景说明3.2.关系类图3.3.代码实现 4.组合模式优缺点5.组合模式适用场景6.组合模式总结 主页传送门:💁 传送 1.组合模式定义 组合模式…

Spring面试题8:面试官:说一说Spring的BeanFactory

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说Spring的BeanFactory Spring的BeanFactory是Spring框架的核心容器,负责管理和创建Bean对象。它是一个工厂类,用于实例化、配置和管理Bean的…

忽视日志吃大亏,手把手教你玩转 SpringBoot 日志

一、日志重要吗 程序中的日志重要吗? 在回答这个问题前,笔者先说个事例: ❝ 笔者印象尤深的就是去年某个同事,收到了客户反馈的紧急bug。尽管申请到了日志文件,但因为很多关键步骤没有打印日志,导致排查进…

基于springboot+vue的车辆管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

专业排版软件InDesign 2023下载 InDesign mac中文功能

InDesign 2023 mac是一款专业排版软件,适用于Windows和macOS平台。它可以帮助用户创建、设计和排版各种印刷品和数字出版物,如杂志、书籍、报纸、广告、海报、手册、电子书等。 InDesign 2023 mac软件特点 多种页面布局:支持多种页面布局&…

名义实际GDP-各地区-原始和结果(2000-2022年)

一、数据介绍 数据名称:名义、实际GDP-各地区-原始和结果 数据年份:2000-2022年 计算公式:实际GDP 名义GDP / GDP折算指数 数据基期:2000年 数据整理:自主整理 二、数据用途 数据用途 文献依据 经济发展水平 …

如何在.NET电子表格应用程序中创建流程图

前言 流程图是一种常用的图形化工具,用于展示过程中事件、决策和操作的顺序和关系。它通过使用不同形状的图标和箭头线条,将任务和步骤按照特定的顺序连接起来,以便清晰地表示一个过程的执行流程。 在企业环境中,高管和经理利用…

区间重叠问题

区间未重叠数量计算: class Solution {public int findMinArrowShots(int[][] points) {//需要用第一种比较器?第二种会报错,在涉及数的大小边界的时候Arrays.sort(points,(a, b) -> Integer.compare(a[0], b[0]));//(a, b) -> Intege…

【算法思想-排序】根据另一个数组次序排序 - 力扣 1122 题

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

员工执行力差,80%是领导的问题

作者| Mr.K 编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 读者小T是大厂P7,今年跳到一家行业独角兽公司,做项目经理。没想到,半年后他的领导Y总,在考核中给他的绩效打了D,主要原因是小T“项目按时完成…

大模型分布式训练策略:ZeRO、FSDP

文章目录 一、ZeRO(零冗余优化器)1.1 背景1.2 深度学习内存消耗分析1.3 主要方法1.3.1 ZeRO-DP优化模型状态内存1.3.2 ZeRO-R优化残余状态内存 1.4 总结1.5 官方视频:ZeRO & Fastest BERT,提高 DeepSpeed 深度学习训练的规模和…

ROS 基础教程

欢迎访问我的博客首页。 ROS 基础教程 1.urdf 文件1.1 在 Rviz 中显示 urdf1.1.1 定义 urdf1.1.2 在 Rviz 中查看 urdf 1.2 在 Gazebo 中显示 urdf1.2.1 定义 urdf1.2.2 在 Gazebo 中查看 urdf 2.建图-仿真2.1 模型 1.urdf 文件 假设我们的工作空间是 ws_ros。我们自己实现的包…

10路LED驱动器和GPIO控制器禾润HTR3310

供电范围:2.5V~5.5V 10个多功能IO,支持LED驱动或GPIO(电流源调光) LED模式下具有256阶线性调光 任意IO可配置为独立的输入或输出 中断功能,8μs防抖,低电平有效 标准I2C接口,4个I2C器件地址…