浏览器只是发送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