成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PhantomJS,隱身瀏覽器

UsherChen / 2454人閱讀

摘要:是一個(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"

如果要配置永久的環(huán)境變量,這個(gè)要自行百度了,我試了,但是沒有成功,汗。。。

HelloWorld

學(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ā)事件

有待補(bǔ)充

網(wǎng)絡(luò)監(jiān)聽

網(wǎng)絡(luò)監(jiān)聽就是綁定兩個(gè)事件:onResourceRequestedonResourceReceived.

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

相關(guān)文章

  • 關(guān)于c++的namespace,你真的了解嗎?真的會(huì)用嗎?

    摘要:據(jù)我了解,很多學(xué)校在學(xué)習(xí)的時(shí)候,老師會(huì)讓學(xué)生死記一條語句,那就是那么你真的了解它嗎命名空間是一個(gè)命名空間。如果我們真的想使用的話,的命名空間遍給了我們解決方法使用命名空間。 據(jù)我了解,很多學(xué)校在學(xué)習(xí)c++的時(shí)候,老師會(huì)讓學(xué)生死記一條語句,那就是 using?namespace?std; 那么...

    Lionad-Morotar 評(píng)論0 收藏0
  • 16、web爬蟲講解2—PhantomJS虛擬覽器+selenium模塊操作PhantomJS

    摘要:百度云搜索,搜各種資料搜網(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...

    xietao3 評(píng)論0 收藏0
  • Mocha覽器測試入門教程

    摘要:在中,需要添加源代碼以及斷言庫運(yùn)行測試使用瀏覽器打開,就會(huì)運(yùn)行測試,并且看到運(yùn)行結(jié)果可知,測試通過使用命令行測試對(duì)于習(xí)慣在終端敲命令行的程序員來說,用瀏覽器打開去進(jìn)行測試顯得非常不合時(shí)宜。 摘要: 如何使用Mocha在瀏覽器中測試JavaScript代碼? 本文所有代碼都在Fundebug/mocha-browser-test倉庫中。 showImg(https://segmentfa...

    Aldous 評(píng)論0 收藏0
  • Python利用Phantomjs抓取渲染JS后的網(wǎng)頁

    摘要:最近需要爬取某網(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)只...

    lowett 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<