亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

PhantomJS,隱身瀏覽器

UsherChen / 2549人閱讀

摘要:是一個無界面的瀏覽器,實(shí)現(xiàn)了傳統(tǒng)瀏覽器的所有功能,除了沒有界面,因此,這是一個隱身瀏覽器。觸發(fā)事件有待補(bǔ)充網(wǎng)絡(luò)監(jiān)聽網(wǎng)絡(luò)監(jiān)聽就是綁定兩個事件和請求的內(nèi)容這是請求。。。響應(yīng)的內(nèi)容這是響應(yīng)。。。

PhantomJS

PhantomJS是一個無界面的瀏覽器,實(shí)現(xiàn)了傳統(tǒng)瀏覽器的所有功能,除了沒有界面,因此,這是一個隱身瀏覽器。

PhantomJS官網(wǎng)

API,特別需要注意的是Web Page Module中的內(nèi)容

根據(jù)官網(wǎng)的解釋,PhantomJS用于網(wǎng)站測試(
HEADLESS WEBSITE TESTING)、屏幕截屏(SCREEN CAPTURE)、頁面自動化(PAGE AUTOMATION)以及網(wǎng)絡(luò)監(jiān)控(NETWORK MONITORING)。

下載及安裝

我只是進(jìn)行了簡單的學(xué)習(xí),因此,沒有把軟件配置到環(huán)境變量中

在官網(wǎng)中下載對應(yīng)系統(tǒng)的壓縮包。

下面是我的安裝過程:

下載壓縮包

解壓zip包/Users/negivup/phantomjs

在命令行中輸入export PATH="$PATH:/Users/negivup/phantomjs/bin"

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

HelloWorld

學(xué)習(xí)程序的第一步就是HelloWorld,這個也不例外,下面咱們寫第一個例子。

var page = require("webpage").create() // webpage是一個核心模塊

/**
 * page.open 一個常用的方法
 * 第一個參數(shù)是地址,第二個參數(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 就會一直不退出
})

特別需要注意的是,phantom.exit一定要存在,不然 PhantomJS 就會一直不退出

保存名字為:hello.js

命令行執(zhí)行(下面的例子也都是這種執(zhí)行方式):

$ phantomjs hello.js

執(zhí)行的結(jié)果:

Status: success
百度一下,你就知道
屏幕截屏

屏幕截圖對應(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ī)的尺寸怎么辦?這個簡單,只需要設(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é)束了。

頁面自動化

頁面自動化,其實(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對象
    })
    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通過這個事件就可以實(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)聽就是綁定兩個事件:onResourceRequestedonResourceReceived.

var url = "http://example.com/"
var page = require("webpage").create()

page.onResourceRequested = function (request) { // 請求的內(nèi)容
  console.log("這是請求。。。")
}

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)容只能算是一個入門,以后盡量多研究一下。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/88932.html

相關(guān)文章

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

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

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

    摘要:百度云搜索,搜各種資料搜網(wǎng)盤,搜各種資料虛擬瀏覽器是一個基于的內(nèi)核無頭瀏覽器也就是沒有顯示界面的瀏覽器,利用這個軟件,可以獲取到網(wǎng)址加載的任何信息,也就是可以獲取瀏覽器異步加載的信息下載網(wǎng)址下載對應(yīng)系統(tǒng)版本下載后解壓文件,將解壓文件夾,剪切 【百度云搜索,搜各種資料:http://www.bdyss.cn】 【搜網(wǎng)盤,搜各種資料:http://www.swpan.cn】 Phantom...

    xietao3 評論0 收藏0
  • Mocha覽器測試入門教程

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

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

    摘要:最近需要爬取某網(wǎng)站,無奈頁面都是渲染后生成的,普通的爬蟲框架搞不定,于是想到用搭一個代理。調(diào)用貌似沒有現(xiàn)成的第三方庫如果有,請告知小,漫步了一圈,發(fā)現(xiàn)只有提供了現(xiàn)成的方案。 最近需要爬取某網(wǎng)站,無奈頁面都是JS渲染后生成的,普通的爬蟲框架搞不定,于是想到用Phantomjs搭一個代理。 Python調(diào)用Phantomjs貌似沒有現(xiàn)成的第三方庫(如果有,請告知小2),漫步了一圈,發(fā)現(xiàn)只...

    lowett 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<