小文筆記 - phantomjs
阿新 • • 發佈:2017-05-14
{} string .org 頁面元素 轉換 擴展 phantom 引用 sub
# 小文筆記 - phantomjs 2017-05-13 ## 第一節:安裝 ``` txt Windows安裝: 下載解壓文件 我的電腦 -> 屬性 -> 高級系統設置 點擊環境變量 在系統變量窗口中,找到Path變量,選中然後選擇編輯 新建後,添加新的環境變量(phantomjs.exe)所在路徑 在cmd中,運行phantomjs Mac安裝: 下載解壓文件 在用戶目錄下查看ls -a查看全部文件 打開.bash_profile文件 加入export PATH=$PATH:/Users/suoyong/phantomjs-2.1.1-macosx/bin 在終端中輸入phantomjs運行 ``` `phantomjs -v` 查看版本。 `phantomjs a.js` 運行 `a.js` 文件。 `phantomjs` 進入程序, `console.log(1)` ,運行 js 代碼。 `phantom.exit()` 退出. ## 第二節:核心模塊 ``` txt Web page 模塊 文件模塊 系統模塊 子進程模塊 網絡服務模塊 網站 phantomjs.org/api/ ``` 使用 `require(‘模塊名‘)` 引用模塊。 a.js ``` js var sys = require(‘system‘); console.log(sys.args); phantom.exit(); ``` 運行,a.js 是第一個參數,hi 是第二個參數。 ``` bat phantomjs a.js hi a.js,hi ``` ## 第三節:WebPage對象(一) ``` txt 創建WebPage對象:create() 打開網址:page.open 在evaluate方法中操作頁面(DOM,JSON,Canvas等) 把當前頁面保存成圖片:page.render() .create() 創建 webPage 對象實例。 .open() 打開網址。 .evaluate() 在這個裏面才能操作 web 界面中的內容。 ``` 打開百度首頁標題 ``` js var webpage = require(‘webpage‘); var page = webpage.create(); page.open(‘https://www.baidu.com‘,function(){ // 打開後做的事 var title = page.evaluate(function(){ // 操作頁面 return document.title }); console.log(title); phantom.exit(1); // 1 成功 0失敗 }) ``` 打開對象 ``` js var webpage = require(‘webpage‘); var page = webpage.create(); page.open(‘https://www.baidu.com‘,function(){ // 打開後做的事 var title = page.evaluate(function(){ // 操作頁面 return document.getElementById(‘lg‘); }); // console.log(title) // [object Object] ,他其他是一個對象 // console.dir(title) // [object Object] ,對象 console.log(JSON.stringify(title)); // 所以需要轉換一下 phantom.exit(1); // 1 成功 0失敗 }) ``` ## 第三節:WebPage對象(二) 不能在 evaluate 中直接使用 console.log 顯示 dom 信息,因為為了不影響其他頁面正常運行, evaluate 是運行在沙盒中的,他沒有 console.log 。 ``` js var webpage = require(‘webpage‘); var page = webpage.create(); page.open(‘https://www.baidu.com‘,function(){ page.evaluate(function(){ console.log(document.getElementById(‘lg‘)); // 不會有 console.log() 輸出。 }); phantom.exit(1); }) ``` 解決方法:為 webpage 對象添加回調函數。 ``` js var webpage = require(‘webpage‘); var page = webpage.create(); page.onConsoleMessage = function(msg){ console.log(msg); } page.open(‘http://www.intalesson.com/‘,function(){ page.evaluate(function(){ console.log(document.title); }); phantom.exit(1); }) ``` ### 傳送參數 如下例添加一個 arg 參數,值為 ‘hi‘ 。 ``` js var webpage = require(‘webpage‘); var page = webpage.create(); page.onConsoleMessage = function(msg){ console.log(msg); } page.open(‘http://www.intalesson.com/‘,function(){ var title = page.evaluate(function(arg){ console.log(arg); },‘hi‘); phantom.exit(1); }) ``` ### 設置 user agent `page.settings.userAgent = ‘要設置的用戶代理‘` ## 第五節:提交表單 - `page.onLoadFinished = function(){}` 當頁面加載完後執行的函數。 - `Dom.submit()` 提交。 - `模仿點擊事件` 提交。 演示登錄智聯招聘並截圖保存。 ``` js var webpage = require(‘webpage‘); var page = webpage.create(); page.open(‘http://www.zhaopin.com/‘,function(){ page.evaluate(function(){ var user = document.getElementById(‘loginname‘); var pass = document.getElementById(‘password‘); user.value = ‘用戶名‘; pass.value = ‘密碼‘; var submit = document.querySelector(‘.logbtn button‘); var evt = document.createEvent(‘MouseEvents‘); // 創建一個鼠標事件 evt.initMouseEvent(‘click‘); // 初始化一個鼠標點擊事件 submit.dispatchEvent(evt); // 使用事件,提交表單 }) page.onLoadFinished = function(status){ if(status == ‘success‘){ // 檢查頁面是否加載完畢 page.render(‘1.png‘); // 把頁面保存圖片 phantom.exit(1); } } }) ``` ## 第六節:操作Cookie - cookies 查看 - addCookie 設置 當設置 cookie 時一定要設置 domain name value 三個值。 ``` js phantom.addCookie({‘domain‘:‘.baidu.com‘,‘name‘:‘xw‘,‘value‘:‘1‘}); console.log(JSON.stringify(phantom.cookies)); phantom.exit(1); ``` ## 第七節:CasperJS CasperJS 擴展自 phantomJS ,可更簡單的操作頁面元素。 phantomjs 不是 nodejs 的模塊,但 casperjs 可使用 npm 安裝。 - `casper.start() = page.open()` - `echo() = console.log()` phantomjs 像 js , casperjs 像 jq 。 - 安裝 casperjs `npm install -g casperjs` ## 第八節:步進式腳本語言 ## 小文註 亂碼問題: http://blog.csdn.net/kaosini/article/details/47252457 - 方法一: 在 js 文件中添加 `phantom.outputEncoding="gbk"` 可解決亂碼。 - 方法二: `phantomjs --output-encoding=gbk a.js`
原文鏈接: http://www.cnblogs.com/daysme/p/6850956.html
小文筆記 - phantomjs