Vue进阶(幺陆伍)PhantomJS 实战讲解

news2025/2/23 4:14:06

文章目录

    • 一、前言
    • 二、PhantomJS
      • 2.1 PhantomJS 使用场景
      • 2.2 PhantomJS 项目实战
        • 2.2.1 环境配置
        • 2.2.2 Demo: 自动化截图
    • 三、拓展阅读

一、前言

在前期博文《Vue进阶(五十六):vue-cli 脚手架 karma.conf.js 配置文件详解》中讲解了 karma.conf.js 文件用于配置前端项目自动化测试信息。 在其配置文件中有如下配置信息:

 // 这里使用的是PhantomJS作为浏览器测试环境,这个插件支持 DOM, CSS, JSON, Canvas, and SVG 的解析
browsers: ['PhantomJS'],

其中,使用了PhantomJS作为无头浏览器测试环境。PhantomJS具体作用是什么呢?本篇博文带你一探究竟。

二、PhantomJS

PhantomJS is a headless WebKit scriptable with a JavaScript API.

PhantomJS是一个基于webkitjavaScript API。它使用QtWebKit作为核心浏览器的功能,使用webkit来编译解释执行javaScript代码。任何可以基于在webkit浏览器做的事情,它都能做到。

它不仅是个隐性无头浏览器,提供了诸如css选择器、支持web标准、DOM操作、json、HTML5等,且同时也提供了处理文件I/O的操作,从而可以向操作系统读写文件等。phantomJS的用处可谓非常广泛,诸如网络监测网页截屏、无需浏览器的web测试、页面访问自动化等。

无头浏览器:一个完整的浏览器内核,包括js解析引擎,渲染引擎,请求处理等,但是不包括显示和用户交互页面的浏览器。

2.1 PhantomJS 使用场景

PhantomJS的适用范围就是无头浏览器的适用范围。通常无头浏览器可以用于页面自动化,网页监控,网络爬虫等:

  • 页面自动化测试:希望自动登陆网站并做一些操作然后检查结果是否正常。
  • 网页监控:希望定期打开页面,检查网站是否能正常加载,加载结果是否符合预期。加载速度如何等。
  • 网络爬虫:获取页面中使用js来下载和渲染信息,或者是获取链接处使用js来跳转后的真实地址。

2.2 PhantomJS 项目实战

2.2.1 环境配置

首先, 下载 PhantomJS。

在这里插入图片描述

下载完成后,直接解压到桌面。然后找到文件夹bin目录下的exe文件的路径。

在这里插入图片描述

复制该路径,找到环境变量中的path,然后把刚才复制的路径粘贴,然后确定。

在这里插入图片描述
最后,打开phantomjs\bin文件夹,双击运行phantomjs.exe,如出现如下界面,就可以运行JS代码了。

在这里插入图片描述

2.2.2 Demo: 自动化截图

首先,编写截屏程序。

var webPage = require('webpage');
var page = webPage.create();

page.open("http://www.baidu.com", function start(status) {
  page.render('baidu.jpeg');
  phantom.exit();
});

保存为helloWorld.js,然后我在控制台内输入:

phantomjs.exe helloWorld.js 

接下来,解读下上述代码的实现逻辑:

var webPage = require('webpage');
var page = webPage.create();

这一句是告诉Phantomjs 我们需要webpagae模型,第二句是创建具体使用对象page。目前Phantom提供的模型有:

  • webpage:最重要的模型,包括打开URL,回退,获取正文、标题,发送事件等;
  • child_process:子进程,在不影响主进程情况下。可以用来输入输出,执行JS等操作;
  • fs:文件系统,用于写本地文件;
  • system:系统,接受参数等;
  • webserver:开放一个端口,搭建一个Phantom的服务。
page.open("http://www.baidu.com", function start(status) {...});

以上语句是告诉PhantomJS我们要打开的页面是http://www.baidu.com,并在打开完成后调用start回调函数。在所有的PhantomJS的对象内,函数都是回调的。

page.render('baidu.jpeg');
phantom.exit();

render这个函数是表示将当前页面绘制回来,并保持到baidu.jpeg内。
Phantom.exit()是退出程序。

phantome.exe  helloWorld.js

使用PhantomJS来执行helloWorld.js这个文件。实际上,在执行JS的时候,可以指定一些参数。比较重要的有:

  • cookies-filecookie文件路径;
  • load-images:是否加载图片;
  • local-to-remote-url-access:是否允许访问远程地址;
  • proxy:代理设置;
  • script-encoding:页面编码;
  • web-security:允许跨站请求;
  • ssl-protocolssl请求设置;

更多接口详情,详参Phantoms 官方文档。

三、拓展阅读

  • 《Vue进阶(五十六):vue-cli 脚手架 karma.conf.js 配置文件详解》
  • Phantoms 官方文档

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

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

相关文章

Jmeter关联操作

1.首先右键添加一个线程选择线程组,命名为线程组-1,添加取样器选择HTTP请求--城市天气 2.线程组-1右键,添加取样器选择后置处理器中的JSON提取器 3.线程组-1右键,添加取样器选择后置处理器中的BeanShell 后置处理程序(必须平级) 4.首先右键添加一个线程选…

MySQL学习(一)——简介以及SQL语句

文章目录 1. MySQL介绍1.1 数据库概述1.2 关系型数据库 2. SQL2.1 SQL通用规范2.2 DDL2.2.1 数据库操作2.2.2 创建和查询表2.2.3 修改表2.2.4 数据类型2.2.5 DataGrip使用 2.3 DML2.3.1 添加数据2.3.2 更新和删除 2.4 DQL2.4.1 基础查询2.4.2 条件查询2.4.3 聚合函数2.4.4 分组…

ArcGIS笔记6_绘制中间镂空的面要素、面要素抠洞

本文目录 前言Step 1 对海湾大整面和零散的岛屿分别绘制面要素Step 2 利用[擦除]工具从海湾大整面中抠掉零散的岛屿 前言 使用ArcGIS做项目时,很多场景下都需要绘制中间镂空的面要素,比如一个海湾中间有许多零散的岛屿,计算水域面积时就要扣…

Linux-CentOS8-Oracle19c 安装详解

Linux-CentOS8-Oracle19c安装图解 文章目录 Linux-CentOS8-Oracle19c安装图解预备1. Oracle19c 安装手册:2. 安装虚拟机:4G内存,2*2核心,30G3. 下载CentOS8镜像。4. 开始准备预安装5. 修改Oracle账户密码6. 修改SELINUX值在文件&a…

行业追踪,2023-10-16

自动复盘 2023-10-16 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…

macos 中ios系统升级,但是macos还是老系统,在手机上无法安装ios软件

https://github.com/filsv/iOSDeviceSupport 构建项目出现 解决的方法: 就可以了,

LeetCode刷题---无重复字符的最长子串

该题使用了滑动窗口来解决此算法,如果使用暴力破解的方法,可能导致更高的时间复杂度 class Solution {public int lengthOfLongestSubstring(String s) {//这里定义left作为左指针int left0;//最大长度,作为最后返回的结果int maxLen0;//这里…

触摸一体机广告机开发板_MTK联发科平台超小型安卓主板方案

小型触摸一体机广告机安卓主板,方便嵌入到各种不同的广告机外壳当中,能节省宝贵的外壳空间,存线也更容易。主板元器件物料也较少,减少了电磁干扰,并只保留常用的功能及接口,功耗也更低,提高了项…

某网站获取到正文内容

网址 aHR0cHM6Ly9pdC5zem9ubGluZS5uZXQvc2h1eml6aG9uZ2d1by8yMDIzMDMyOS8yMDIzMDM3ODAzNDAuaHRtbA抓包 猜想:从图中对比发现取第一次请求返回的Set-Cookie作为第二次请求的cookies,不过需要把Set-Cookie中的secret-100(此时注意int和str类型…

一份谷歌写给 CTO 们的报告 - DORA 2023 版全面解读

背景 几天前,谷歌云旗下的 DORA (DevOps Research and Assessments) 发布了一年一度的 State of DevOps 2023 报告。DORA 在国内不像 Gartner 有那么高的知名度,但在全球,DORA 是研发效能 / DevOps 领域最具影响力的报告,从 2014…

CentOS 7 部署Jellyfin详细教程

前言 Jellyfin是免费、开源的媒体服务器解决方案,它能让我们轻松地管理和访问个人媒体文件,如电影、音乐等。本文将向您介绍如何快速搭建和部署Jellyfin,并分享一些最佳实践和技巧,帮助您更好地利用这个强大的媒体服务器解决方案。…

nginx的正向代理,反向代理和负载均衡

nginx当中有两种代理方式以及含义: 1.七层代理 (http协议) 核心:代理的是http的请求和响应 客户端请求代理服务器:由代理服务器转发客户端的httpd请求,转发到内部的服务器(可以是单台和可以是一…

【Android】android.view.WindowManager$BadTokenException 异常fix 解决

背景 爆出如上的问题:官方文档 解决: 我的问题是在于 activity销毁了,结果还要弹出Dialog导致的崩溃,异步处理。 if(isFinishing()){// 在异步情况下,如果activity销毁后再弹dialog 会导致异常,故如果正在…

转行要趁早!盘点网络安全的岗位汇总!

前段时间,知名机构麦可思研究院发布了《2022年中国本科生就业报告》,其中详细列出近五年的本科绿牌专业,信息安全位列第一。 对于网络安全的发展与就业前景,知了姐说过很多,作为当下应届生收入较高的专业之一&#xf…

Vue配置全局变量config.js

Vue配置全局变量config.js 若config.js在public目录下 在index.html中引入 这样配置是为了防止路由前缀&#xff0c;如果直接“/config.js”&#xff0c;若路由没有前缀还好&#xff0c;要是有就需要配置为“<% BASE_URL %>config.js”

windows应用程序告警:帐户名与安全标识间无任何映射完成

目录 一、问题现象 二、问题解决 &#xff08;一&#xff09;官方方法 &#xff08;二&#xff09;问题定位 &#xff08;三&#xff09;问题处理 一、问题现象 今天巡检域控服务器时&#xff0c;发现告警如下&#xff1a; 安全策略已传播&#xff0c;但有警告信息。 0x534…

实战:在Nginx服务器安装SSL证书并配置强制跳转https-2023.10.16(测试成功)

实战&#xff1a;在Nginx服务器安装SSL证书并配置强制跳转https-2023.10.16(测试成功) 原文链接 https://help.aliyun.com/zh/ssl-certificate/user-guide/install-ssl-certificates-on-nginx-servers-or-tengine-servers?spma2c4g.11186623.0.0.7ab93cb39AuLXF 更新时间&…

1-k8s1.23.6-底座搭建-基于docker

这里写自定义目录标题 一、服务器准备二、安装docker三、安装k8s四、安装部署dashboard 一、服务器准备 服务器准备 服务器名称服务器IP角色CPU(最低要求)内存(最低要求)master192.168.248.10master2核2Gworker1192.168.248.11node2核2Gworker2192.168.248.12node2核2G 修改ip&…

JavaSE入门---数据类型与变量

文章目录 数据类型基本数据类型引用数据类型 常量变量变量类型类型转换自动类型转换&#xff08;隐式&#xff09;强制类型转换&#xff08;显式&#xff09; 类型提升 字符串类型 数据类型 在Java中&#xff0c;数据类型基本分为俩类&#xff1a;基本数据类型和引用数据类型。…

代理IP可以用于哪些实际场景?遇到问题如何解决

代理IP的应用场景非常广泛&#xff0c;可以在不同领域提供许多有用的功能。以下是关于代理IP应用场景的详细扩充&#xff0c;包括每个场景的优势和应用建议&#xff0c;以及在使用代理IP时可能遇到的问题和应对方法。 1.价格监控&#xff1a; 商业竞争很大程度上是价格竞争。在…