瀏覽器只是發送HTTP請求到服務器,你不一定需要加載一個DOM。如果您可以對您要發送的請求進行逆向工程,則可以輕鬆地嘲笑網頁或工作流程的行爲。當您使用PHP的cURL發送請求時,您需要將cookie存儲在cookie jar中以維護跨請求的cookie。像這樣的東西應該讓你開始:
function load($url, $postData = array())
{
$useragent = "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_HEADER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_ENCODING, 'UTF-8');
curl_setopt($curl, CURLOPT_USERAGENT, $useragent);
curl_setopt($curl, CURLOPT_POST, !empty($postData));
if(!empty($postData)) curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookieFile);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookieFile);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);
$page = curl_exec ($curl);
curl_close ($curl);
return $page;
}
如果你想運行一個無頭的瀏覽器維持餅乾cookie罐,我會建議像PhantomJS。然後,您可以加載頁面和頁面的上下文中執行代碼:
"use strict";
var page = require('webpage').create();
page.onConsoleMessage = function(msg) {
console.log(msg);
};
page.open("http://phantomjs.org/", function(status) {
if (status === "success") {
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
page.evaluate(function() {
console.log("$(\".explanation\").text() -> " + $(".explanation").text());
});
phantom.exit(0);
});
} else {
phantom.exit(1);
}
});
的代碼可以在Github上找到:https://github.com/ariya/phantomjs/blob/master/examples/phantomwebintro.js
但JavaScript的也可以設置Cookie,不它呢? 在這種情況下,我需要模擬DOM行爲 – Morrisda
是的,JavaScript可以設置cookie。但是,您可以反向設置設置了哪些cookie,並根據請求手動設置它們。我只是指出,像刮環境一樣的瀏覽器可能會很昂貴,而且不具有可擴展性。 –
我真的不需要它是可擴展的,但精確。 有關如何實施您的解決方案的任何建議? (反向生成cookie設置) – Morrisda