PhantomJS與PHP的使用方法
PhantomJS是一個神奇的工具,它可以模擬瀏覽器,并且可以通過 Javascript 控制瀏覽器。在 PHP 中使用 PhantomJS 可以實現一些復雜的自動化任務,比如爬蟲、自動化測試、網頁截圖等等。本文將介紹如何在 PHP 中使用 PhantomJS 工具,以及如何實現一些常見的功能。
安裝 PhantonJS
如果你還沒有安裝 PhantomJS,可以到官網:http://phantomjs.org/download.html下載相應版本的安裝包。如果你使用的是 Ubuntu 系統,可以通過以下命令安裝:
sudo apt-get install phantomjs
使用 PhantomJS
在 PHP 中使用 PhantomJS,通常我們需要將 JavaScript 代碼寫到一個 .js 文件中,并且使用 PHP 調用 PhantomJS 來執行 .js 文件中的代碼。以下是一個簡單的例子,該示例中,我們使用 PhantomJS 打開 `https://www.baidu.com`,并將網頁保存為 `baidu.png`。
<?php // 執行 js 文件 exec('phantomjs baidu.js'); ?>
上述 PHP 代碼中調用了 `baidu.js` 文件,它的代碼如下:
var page = require('webpage').create(); page.open('https://www.baidu.com', function() { page.render('baidu.png'); phantom.exit(); });
上述 JavaScript 代碼使用 PhantomJS 打開一個網頁,然后將網頁截圖保存至 `baidu.png` 文件。需要注意的是,在 JavaScript 代碼中必須加入 `phantom.exit();`,否則程序將不會退出。
網頁截圖
通過下面的代碼,我們可以將一個網頁截圖保存到指定的文件中:
var page = require('webpage').create(); page.open('https://www.baidu.com', function() { page.render('baidu.png'); // 將網頁截圖保存到 baidu.png 文件中 phantom.exit(); });
獲取頁面內容
使用 PhantomJS,我們可以很容易的獲取一個頁面的 HTML 內容:
var page = require('webpage').create(); page.open('https://www.baidu.com', function() { var content = page.content; // 獲取頁面內容 console.log(content); // 輸出頁面內容 phantom.exit(); });
模仿用戶操作
PhantomJS 可以通過 simulate 類的方法來模仿用戶的一些操作,比如點擊、輸入等。以下是一個例子,該示例中使用 PhantomJS 模擬雙擊百度輸入框,然后輸入 "Hello World!:
var page = require('webpage').create(); page.open('https://www.baidu.com', function() { page.evaluate(function() { var input = document.getElementById('kw'); // 模擬雙擊輸入框 input.dispatchEvent(new MouseEvent('dblclick', { 'view': window, 'bubbles': true, 'cancelable': true })); // 在輸入框中輸入內容 var e = document.createEvent('Events'); e.initEvent('keydown', true, true); e.keyCode = 72; e.which = 72; input.dispatchEvent(e); e.initEvent('keypress', true, true); e.keyCode = 72; e.which = 72; input.dispatchEvent(e); e.initEvent('keyup', true, true); e.keyCode = 72; e.which = 72; input.dispatchEvent(e); // 輸入回車鍵,提交搜索 e.initEvent('keydown', true, true); e.keyCode = 13; e.which = 13; input.dispatchEvent(e); }); phantom.exit(); });
通過上例,我們可以看到 PhantomJS 模擬用戶的操作非常方便,只需要找到相應的元素,并調用相應的方法即可模擬用戶操作。
從外部給 JavaScript 傳遞參數
有時候,我們需要將 PHP 中的一些參數傳遞給 JavaScript,然后在 JavaScript 代碼中使用這些參數。以下是一個例子,該示例中,從 PHP 中傳遞一個參數給 JavaScript:
<?php $word = 'Hello World!'; // 傳遞一個參數到 js 文件中 exec("phantomjs baidu.js '".$word."'"); ?>
上述 PHP 代碼中,我們將一個字符串 `Hello World!` 傳遞到了 `baidu.js` 文件中,JavaScript 代碼如下:
var page = require('webpage').create(); var system = require('system'); var word = system.args[1]; // 從外部傳入的參數 page.open('https://www.baidu.com', function() { // 在輸入框中輸入參數 page.evaluate(function(word) { document.getElementById('kw').value = word; }, word); // 提交搜索 var btn = document.getElementById('su'); btn.click(); phantom.exit(); });
上述 JavaScript 代碼中,我們通過 `system.args[1]` 獲取到了 PHP 中傳遞的參數,并將其傳遞給了 JavaScript 代碼。
總結
本文介紹了在 PHP 中使用 PhantomJS 的方法,并對使用中的一些技巧進行了詳細的講解。PhantomJS 可以在一定程度上滿足我們對于自動化任務的需求,同時也可以極大的提高我們的開發效率。希望本文對大家有所幫助。