摘要:是一個無界面的瀏覽器,實現了傳統瀏覽器的所有功能,除了沒有界面,因此,這是一個隱身瀏覽器。觸發事件有待補充網絡監聽網絡監聽就是綁定兩個事件和請求的內容這是請求。。。響應的內容這是響應。。。
PhantomJS
PhantomJS是一個無界面的瀏覽器,實現了傳統瀏覽器的所有功能,除了沒有界面,因此,這是一個隱身瀏覽器。
PhantomJS官網
API,特別需要注意的是Web Page Module中的內容
根據官網的解釋,PhantomJS用于網站測試(
HEADLESS WEBSITE TESTING)、屏幕截屏(SCREEN CAPTURE)、頁面自動化(PAGE AUTOMATION)以及網絡監控(NETWORK MONITORING)。
我只是進行了簡單的學習,因此,沒有把軟件配置到環境變量中
在官網中下載對應系統的壓縮包。
下面是我的安裝過程:
下載壓縮包
解壓zip包/Users/negivup/phantomjs
在命令行中輸入export PATH="$PATH:/Users/negivup/phantomjs/bin"
HelloWorld如果要配置永久的環境變量,這個要自行百度了,我試了,但是沒有成功,汗。。。
學習程序的第一步就是HelloWorld,這個也不例外,下面咱們寫第一個例子。
var page = require("webpage").create() // webpage是一個核心模塊 /** * page.open 一個常用的方法 * 第一個參數是地址,第二個參數是回調 */ page.open("http://www.baidu.com", function (status) { console.log("Status: " + status) if (status === "success") { console.log(page.title) } else { console.log("fail to load") } phantom.exit() // 如果沒有這句代碼,PhantomJS 就會一直不退出 })
特別需要注意的是,phantom.exit一定要存在,不然 PhantomJS 就會一直不退出
保存名字為:hello.js
命令行執行(下面的例子也都是這種執行方式):
$ phantomjs hello.js
執行的結果:
Status: success 百度一下,你就知道屏幕截屏
屏幕截圖對應的文檔地址:http://phantomjs.org/screen-capture.html
截屏使用的是render函數,地址:http://phantomjs.org/api/webpage/method/render.html
簡單截屏var url = "http://example.com/" var page = require("webpage").create() page.open(url, function (status) { if (status === "success") { page.render("example.png") // 保存截圖 } else { console.log("fail to load") } phantom.exit() })
截圖保存的位置就是js文件所在的位置。
指定頁面的寬度和高度如果要截圖的尺寸是手機的尺寸怎么辦?這個簡單,只需要設置page.viewportSize即可。
var url = "http://example.com/" var page = require("webpage").create() page.viewportSize = { // 設置尺寸為iPhone6的尺寸 width: 375, height: 667 } page.open(url, function (status) { if (status === "success") { page.render("example.png") // 保存截圖 } else { console.log("fail to load") } phantom.exit() })截取頁面的某部分內容
現在我只需要截取的部分是30*30,該怎么解決呢?看下面的代碼。
var url = "http://example.com/" var page = require("webpage").create() page.viewportSize = { width: 375, height: 667 } page.clipRect = { // 設置截圖的實際尺寸 top: 0, left: 0, width: 30, height: 30 } page.open(url, function (status) { if (status === "success") { page.render("example.png") // 保存截圖 } else { console.log("fail to load") } phantom.exit() })
這樣,截圖的簡單使用就結束了。
頁面自動化頁面自動化,其實就是通過自己寫的程序操作頁面的DOM。
文檔地址
接口地址
簡單的DOM操作在Phantomjs中,可以使用所有JavaScript中的選擇器。
var url = "http://example.com/" var page = require("webpage").create() page.open(url, function (status) { if (status === "success") { var content = page.evaluate(function () { var ele = document.querySelector("h1") return ele // 返回當前的DOM對象 }) console.log(content.innerHTML) // 打印輸出內容 } else { console.log("fail to load") } phantom.exit() })
上面的代碼是不是有點不爽,在page.evaluate中直接使用console.log根本打印不出來內容,難道內容無法在page.evaluate中正常獲取嗎?如果不使用return,能不能獲取內容呢?答案是肯定的。
上面代碼的優化:onConsoleMessage通過這個事件就可以實現直接打印輸出的內容:
var url = "http://example.com/" var page = require("webpage").create() page.onConsoleMessage = function (msg) { console.log(msg) } page.open(url, function (status) { if (status === "success") { var content = page.evaluate(function () { var ele = document.querySelector("h1") console.log(ele.innerHTML) }) } else { console.log("fail to load") } phantom.exit() })
這種方式實現的效果和上面的實現效果相同。
觸發事件網絡監聽有待補充
網絡監聽就是綁定兩個事件:onResourceRequested和onResourceReceived.
var url = "http://example.com/" var page = require("webpage").create() page.onResourceRequested = function (request) { // 請求的內容 console.log("這是請求。。。") } page.onResourceReceived = function (response) { // 響應的內容 console.log("這是響應。。。") } page.open(url, function (status) { if (status === "success") { console.log(document.title) } else { console.log("fail to load") } phantom.exit() })
上面的內容只能算是一個入門,以后盡量多研究一下。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/88932.html
摘要:據我了解,很多學校在學習的時候,老師會讓學生死記一條語句,那就是那么你真的了解它嗎命名空間是一個命名空間。如果我們真的想使用的話,的命名空間遍給了我們解決方法使用命名空間。 據我了解,很多學校在學習c++的時候,老師會讓學生死記一條語句,那就是 using?namespace?std; 那么...
摘要:百度云搜索,搜各種資料搜網盤,搜各種資料虛擬瀏覽器是一個基于的內核無頭瀏覽器也就是沒有顯示界面的瀏覽器,利用這個軟件,可以獲取到網址加載的任何信息,也就是可以獲取瀏覽器異步加載的信息下載網址下載對應系統版本下載后解壓文件,將解壓文件夾,剪切 【百度云搜索,搜各種資料:http://www.bdyss.cn】 【搜網盤,搜各種資料:http://www.swpan.cn】 Phantom...
摘要:在中,需要添加源代碼以及斷言庫運行測試使用瀏覽器打開,就會運行測試,并且看到運行結果可知,測試通過使用命令行測試對于習慣在終端敲命令行的程序員來說,用瀏覽器打開去進行測試顯得非常不合時宜。 摘要: 如何使用Mocha在瀏覽器中測試JavaScript代碼? 本文所有代碼都在Fundebug/mocha-browser-test倉庫中。 showImg(https://segmentfa...
摘要:最近需要爬取某網站,無奈頁面都是渲染后生成的,普通的爬蟲框架搞不定,于是想到用搭一個代理。調用貌似沒有現成的第三方庫如果有,請告知小,漫步了一圈,發現只有提供了現成的方案。 最近需要爬取某網站,無奈頁面都是JS渲染后生成的,普通的爬蟲框架搞不定,于是想到用Phantomjs搭一個代理。 Python調用Phantomjs貌似沒有現成的第三方庫(如果有,請告知小2),漫步了一圈,發現只...
閱讀 882·2021-11-23 09:51
閱讀 1089·2021-11-15 17:57
閱讀 1667·2021-09-22 15:24
閱讀 812·2021-09-07 09:59
閱讀 2221·2019-08-29 15:10
閱讀 1849·2019-08-29 12:47
閱讀 751·2019-08-29 12:30
閱讀 3369·2019-08-26 13:51