首頁 web前端 js教程 PhantomJS快速入門教學(伺服器端的 JavaScript API 的 WebKit)_javascript技巧

PhantomJS快速入門教學(伺服器端的 JavaScript API 的 WebKit)_javascript技巧

May 16, 2016 pm 03:46 PM
phantomjs 快速入門

PhantomJS 是一個基於 WebKit 的伺服器端 JavaScript API。它全面支援web而不需瀏覽器支持,其快速,原生支持各種Web標準: DOM 處理, CSS 選擇器, JSON, Canvas, 和 SVG。 PhantomJS 可用於 頁面自動化 , 網路監測 , 網頁截圖 ,以及 無介面測試 等。

PhantomJs官網:http://phantomjs.org/
GitHub:https://github.com/ariya/phantomjs/wiki/Quick-Start

一、安裝

安裝套件下載位址:http://phantomjs.org/download.html ,包含Windows ,Mac OS,Linux版本,自行選擇對應版本下載解壓縮即可( 為方便使用,可自已為phantomjs設定環境變數),其中有一個example資料夾,裡面有許多已經寫好的程式碼可供使用。本文假設phantomjs已經安裝好並已設定了環境變數。

二、使用

Hello, World!

新建一個包含下面兩行腳本的文字檔:

console.log('Hello, world!');
phantom.exit();
登入後複製

將檔案另存為 hello.js ,然後執行它:

phantomjs hello.js

輸出結果為:Hello, world!

第一行將會在終端機上印出字串,第二行 phantom.exit 將退出運作。
在該腳本中呼叫 phantom.exit 是非常重要的,否則 PhantomJS 將根本不會停止。

腳本參數 – Script Arguments

Phantomjs如何傳遞參數呢?如下圖 :

複製程式碼 程式碼如下:

phantomjs examples/arguments.js foo bar baz

其中的foo, bar, baz就是要傳遞的參數,如何取得呢:

var system = require('system');
if (system.args.length === 1) {
 console.log('Try to pass some args when invoking this script!');
} else {
 system.args.forEach(function (arg, i) {
   console.log(i + ': ' + arg);
 });
}
phantom.exit();
登入後複製

它將輸出 :

0: foo
1: bar
2: baz

頁面載入 – Page Loading

透過建立一個網頁對象,一個網頁可以被加載,分析和渲染。

下面的腳本將範例頁面物件最簡單的用法,它載入 example.com 並且將它儲存為一張圖片, example.png 。

var page = require('webpage').create();
page.open('http://example.com', function () {
 page.render('example.png');
 phantom.exit();
});
登入後複製

由於它的這個特性,PhantomJS 可以用來 網頁截圖 ,截取一些內容的快照,比如將網頁、SVG存成圖片,PDF等,這個功能很牛X。

接下來的 loadspeed.js 腳本載入一個特殊的URL (不要忘了http協定) 並且計量載入該頁面的時間。

var page = require('webpage').create(),
 system = require('system'),
 t, address;

if (system.args.length === 1) {
 console.log('Usage: loadspeed.js <some URL>');
 phantom.exit();
}

t = Date.now();
address = system.args[1];
page.open(address, function (status) {
 if (status !== 'success') {
  console.log('FAIL to load the address');
 } else {
  t = Date.now() - t;
  console.log('Loading time ' + t + ' msec');
 }
 phantom.exit();
});
登入後複製

在命令列運行該腳本:

phantomjs loadspeed.js http://www.google.com
它輸出像下面的東西:

Loading http://www.google.com Loading time 719 msec

程式碼運算 – Code Evaluation

要想在網頁的上下文中對JavaScript 或 CoffeeScript 進行運算,使用 evaluate() 方法。程式碼是在「沙箱」中運行的,它沒有辦法讀取在其所屬頁面上下文之外的任何JavaScript物件和變數。 evaluate() 會傳回一個對象,然而它只限制於簡單的物件並且不能包含方法或閉包。

這有一個範例來顯示網頁標題:

var page = require('webpage').create();
page.open(url, function (status) {
 var title = page.evaluate(function () {
  return document.title;
 });
 console.log('Page title is ' + title);
});
登入後複製

任何來自於網頁並且包括來自 evaluate() 內部程式碼的控制台訊息,預設不會顯示的。要重寫這個行為,使用 onConsoleMessage 回呼函數,前一個範例可以改寫成:

var page = require('webpage').create();
page.onConsoleMessage = function (msg) {
 console.log('Page title is ' + msg);
};
page.open(url, function (status) {
 page.evaluate(function () {
  console.log(document.title);
 });
});
登入後複製

DOM操作 – DOM Manipulation

由於腳本好像是一個在網頁瀏覽器上運行的一樣,標準的DOM腳本和CSS選擇器可以很好的工作。這使得PhantomJS適合支援各種 頁面自動化任務 。

下面的 useragent.js 將讀取 id 為myagent的元素的 textContent 屬性:

var page = require('webpage').create();
console.log('The default user agent is ' + page.settings.userAgent);
page.settings.userAgent = 'SpecialAgent';
page.open('http://www.httpuseragent.org', function (status) {
 if (status !== 'success') {
  console.log('Unable to access network');
 } else {
  var ua = page.evaluate(function () {
   return document.getElementById('myagent').textContent;
  });
  console.log(ua);
 }
 phantom.exit();
});
登入後複製

上面範例同樣提供了一種自訂 user agent 的方法。

使用JQuery及其他類別庫:

var page = require('webpage').create();
page.open('http://www.sample.com', function() {
 page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
  page.evaluate(function() {
   $("button").click();
  });
  phantom.exit()
 });
});
登入後複製

網路請求及回應 – Network Requests and Responses

將一個頁面從一台遠端伺服器請求一個資源的時候,請求和回應都可以透過 onResourceRequested 和 onResourceReceived 回呼方法追蹤到。範例 netlog.js

var page = require('webpage').create();
page.onResourceRequested = function (request) {
 console.log('Request ' + JSON.stringify(request, undefined, 4));
};
page.onResourceReceived = function (response) {
 console.log('Receive ' + JSON.stringify(response, undefined, 4));
};
page.open(url);
登入後複製

獲取如何把該特性用於HAR 輸出以及基於YSlow的性能分析的更多信息,請參閱 網絡監控頁面

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Python學習:如何在系統中安裝pandas函式庫 Python學習:如何在系統中安裝pandas函式庫 Jan 09, 2024 pm 04:42 PM

快速入門:Python安裝pandas函式庫的方法,需要具體程式碼範例一、概述Python是一種廣泛使用的程式語言,它擁有強大的開發生態系統,其中包括許多實用的程式庫。而pandas是其中一款非常受歡迎的資料分析庫,它提供了高效的資料結構和資料分析工具,使得資料處理和分析變得更加簡單。本文將介紹如何在Python中安裝pandas庫,並提供對應的程式碼範例。二、安裝Py

快速入門Mojs動畫庫:爆炸模組指南 快速入門Mojs動畫庫:爆炸模組指南 Sep 02, 2023 pm 11:49 PM

我們透過學習如何使用mojs為HTML元素添加動畫來開始本系列。在第二個教學中,我們繼續使用Shape模組製作內建SVG形狀的動畫。第三個教學介紹了使用ShapeSwirl和stagger模組對SVG形狀進行動畫處理的更多方法。現在,我們將學習如何使用Burst模組以突發形式製作不同SVG形狀的動畫。本教程將取決於我們在前三個教程中介紹的概念。如果您還沒有閱讀過它們,我建議您先閱讀它們。創建基本連拍動畫在創建任何突發動畫之前,我們需要做的第一件事是實例化Burst物件。之後,我們可以指定不同屬性

快速入門:使用Go語言函數實現簡單的音訊串流服務 快速入門:使用Go語言函數實現簡單的音訊串流服務 Jul 29, 2023 pm 11:45 PM

快速入門:使用Go語言函數實現簡單的音訊串流服務引言:音訊串流服務在今天的數位化世界中越來越受歡迎,它可以讓我們透過網路直接播放音訊文件,而無需進行完整的下載。本文將介紹如何使用Go語言函數來快速實現一個簡單的音訊串流服務,以便您能更好地理解和使用這項功能。第一步:準備工作首先,您需要安裝Go語言的開發環境。您可以從官方網站(https://golan

推薦五款Go語言常用框架,讓您快速入門 推薦五款Go語言常用框架,讓您快速入門 Feb 24, 2024 pm 05:09 PM

Title:快速上手:五款Go語言常用框架推薦近年來,隨著Go語言的流行,越來越多的開發者選擇採用Go進行專案開發。 Go語言以其高效、簡潔和性能優越等特點受到了廣泛關注。在Go語言開發中,選擇適合的框架能夠提高開發效率和程式碼品質。本文將介紹五款Go語言常用框架,並附上程式碼範例,幫助讀者快速上手。 Gin框架Gin是一個輕量級的web框架,具有快速高效的特點,

快速入門:使用Go語言函數實現簡單的圖像辨識功能 快速入門:使用Go語言函數實現簡單的圖像辨識功能 Jul 30, 2023 pm 09:49 PM

快速入門:使用Go語言函數實現簡單的影像辨識功能在現今的科技發展中,影像辨識技術已成為一個熱門的話題。作為一種快速且有效率的程式語言,Go語言具備了實現影像辨識功能的能力。本文將透過使用Go語言函數實現簡單的圖像辨識功能,為讀者提供一個快速入門的指南。首先,我們需要安裝Go語言的開發環境。可在Go語言官方網站(https://golang.org/)上下載適

在Scrapy爬蟲中使用Selenium和PhantomJS 在Scrapy爬蟲中使用Selenium和PhantomJS Jun 22, 2023 pm 06:03 PM

在Scrapy爬蟲中使用Selenium和PhantomJSScrapy是Python下的一個優秀的網路爬蟲框架,已經被廣泛應用於各個領域中的資料收集和處理。在爬蟲的實作中,有時候需要模擬瀏覽器操作去取得某些網站呈現的內容,這時候就需要用到Selenium和PhantomJS。 Selenium是模擬人類對瀏覽器的操作,讓我們可以自動化地進行網頁應用程式測試

學習使用五種Kafka視覺化工具的快速入門 學習使用五種Kafka視覺化工具的快速入門 Jan 31, 2024 pm 04:32 PM

快速入門:五種Kafka視覺化工具的使用指南1.Kafka監控工具:簡介ApacheKafka是一種分散式發布-訂閱訊息系統,它可以處理大量的數據,並提供高吞吐量和低延遲。由於Kafka的複雜性,需要使用視覺化工具來幫助監控和管理Kafka叢集。 2.Kafka視覺化工具:五大選擇KafkaManager:KafkaManager是一個開源的Web界

快速入門:使用Go語言函數實現簡單的資料聚合功能 快速入門:使用Go語言函數實現簡單的資料聚合功能 Jul 29, 2023 pm 02:06 PM

快速入門:使用Go語言函數實現簡單的資料聚合功能在軟體開發中,我們經常會遇到需要對一組資料進行聚合的情況。聚合操作可以統計、匯總、計算等,對資料進行分析展示。而在Go語言中,我們可以使用函數來實作簡單的資料聚合功能。首先,我們需要定義一個資料類型來表示我們要進行聚合的資料。假設我們有一個學生的成績表,每個學生有姓名和成績兩個字段,那麼我們可以創建如下的結構

See all articles