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