我想使用phantomjs(版本1.9.1,在Windows上)訪問一些QUnit測試網址。我在公司網站的代理背後,但我試圖訪問的URL是從我的本地開發工作站提供的,另外我甚至嘗試在沒有必要的情況下使用其他兩個瀏覽器(Hv3和Dooble)訪問相同的URL代理設置,即使他們無法執行QUnit JavaScript,他們也會獲得HTML響應。爲什麼我沒有收到phantomjs頁面響應?
所以我甚至試着調整javascriptEnabled設置(加上另外幾個設置,請參閱下面的代碼)爲false,試圖獲取原始HTML,但無濟於事。我在try/catch中將我的調用封裝到了page.open中,但顯然這不是因爲異常;而是在最終的phantom.exit()語句執行之前立即使用console.log語句。
此外,我遵循https://github.com/ariya/phantomjs/wiki/Network-Monitoring的建議,包括從page.onResourceRequested,page.onError和page.onResourceReceived進行日誌記錄,並且只有onResourceReceived的回調被執行。而我指定--proxy-type = none命令行參數,都無濟於事。
代碼和輸出如下,在此先感謝。我無所適從;也許這是一個幻影問題?只是想在報告之前排除所有事情。
CODE:
var page = require('webpage').create();
page.onResourceRequested = function (request) {
console.log('Request ' + JSON.stringify(request, undefined, 4));
};
page.onResourceReceived = function (response) {
console.log('Receive ' + JSON.stringify(response, undefined, 4));
};
page.onError = function (msg, trace) {
console.log(msg);
trace.forEach(function(item) {
console.log(' ', item.file, ':', item.line);
})
}
page.settings.webSecurityEnabled = false;
page.settings.localToRemoteUrlAccessEnabled = true;
//page.settings.javascriptEnabled = false;
for (var setting in page.settings) {
console.log(setting + ": " + page.settings[setting]);
}
try {
page.open('http://local.example.com:9001/test/workflow', function() {
console.log('page opened');
});
}
catch(xcep) {
console.log(xcep);
}
console.log('before exit');
phantom.exit();
OUTPUT:
XSSAuditingEnabled: false
javascriptCanCloseWindows: true
javascriptCanOpenWindows: true
javascriptEnabled: true
loadImages: true
localToRemoteUrlAccessEnabled: true
userAgent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.1 Safari/534.34
webSecurityEnabled: false
Request {
"headers": [
{
"name": "User-Agent",
"value": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.1 Safari/534.34"
},
{
"name": "Accept",
"value": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
}
],
"id": 1,
"method": "GET",
"time": "2013-07-12T09:49:58.262Z",
"url": "http://local.example.com:9001/test/workflow"
}
before exit
感謝,做課程的伎倆。我的想法是我不想在與page.open回調相同的塊內使用phantom.exit(),因爲我實際上想要連續打開幾個頁面。我想我可以想辦法做到這一點,使用關閉和減少櫃檯。 –
@GeorgeJempty它對異步操作有點棘手,但是,是的,你可以做到這一點。即使有多個異步操作,您只需要知道何時達到了停止條件。正如你所建議的那樣,你可以通過多種方式來應對。 –