📅  最后修改于: 2023-12-03 15:18:18.738000             🧑  作者: Mango
PhantomJS是一个基于WebKit的无头浏览器,可进行自动化的网页截屏、网络监控等功能。在网络监控方面,PhantomJS可以捕获HTTP请求和响应,并生成HAR(HTTP Archive)文件,以便分析和优化页面性能。
PhantomJS可以通过官方网站(http://phantomjs.org/)下载安装包,也可以通过包管理器(如npm)安装。以下是通过npm安装的命令:
npm install phantomjs-prebuilt
使用PhantomJS进行网络监控需要编写一个脚本,在脚本中可以定义需要监控的URL和其他相关参数。以下是一个示例脚本:
var page = require('webpage').create();
var url = 'https://www.example.com';
var har = {};
page.onLoadStarted = function () {
har.startedDateTime = new Date().toISOString();
};
page.onResourceRequested = function (requestData, networkRequest) {
var entry = {
'request': {
'url': requestData.url,
'method': requestData.method,
'httpVersion': 'HTTP/1.1',
'cookies': [],
'headers': [],
'queryString': [],
'headersSize': -1,
'bodySize': -1
},
'response': {},
'cache': {},
'timings': {
'blocked': -1,
'dns': -1,
'connect': -1,
'send': 0,
'wait': 0,
'receive': 0
},
'serverIPAddress': ''
};
har.log.entries.push(entry);
networkRequest.setHeaderValue('X-Requested-By', 'PhantomJS');
};
page.onResourceReceived = function (response) {
var entry = har.log.entries[har.log.entries.length - 1];
entry.response.status = response.status;
entry.response.statusText = response.statusText;
entry.response.httpVersion = 'HTTP/1.1';
entry.response.cookies = response.cookies;
entry.response.headers = response.headers;
entry.response.content = {
'size': response.bodySize,
'mimeType': response.contentType || 'text/plain'
};
entry.response.redirectURL = response.redirectURL;
entry.response.statusText = response.statusText;
entry.cache = {};
entry.timings.receive = new Date().getTime() - entry._start;
};
page.open(url, function (status) {
if (status !== 'success') {
console.log('Unable to access network');
} else {
har = {
'log': {
'version': '1.2',
'creator': {
'name': 'PhantomJS',
'version': phantom.version.major + '.' + phantom.version.minor + '.' + phantom.version.patch
},
'entries': []
}
};
har.log.pages = [{
'startedDateTime': har.startedDateTime,
'id': page.title,
'title': page.title,
'pageTimings': {
'onContentLoad': -1,
'onLoad': new Date().getTime() - page.startTime
}
}];
console.log(JSON.stringify(har, undefined, 4));
}
});
在脚本中,使用require('webpage').create()
创建了一个Web页面,定义了要监控的URL,并在页面加载时设置了HAR文件的起始时间。在onResourceRequested()
和onResourceReceived()
函数中,分别捕获HTTP请求和响应,并将它们添加到HAR文件的条目中。最后将HAR文件输出到控制台。
执行以上脚本,即可得到类似以下的HAR文件输出:
{
"log": {
"version": "1.2",
"creator": {
"name": "PhantomJS",
"version": "2.1.1"
},
"pages": [
{
"startedDateTime": "2020-10-31T05:38:12.687Z",
"id": "Example Domain",
"title": "Example Domain",
"pageTimings": {
"onContentLoad": -1,
"onLoad": 939
}
}
],
"entries": [
{
"request": {
"url": "https://www.example.com/",
"method": "GET",
"httpVersion": "HTTP/1.1",
...
},
"response": {
"status": 200,
"statusText": "OK",
"httpVersion": "HTTP/1.1",
...
},
"cache": {},
"timings": {
"blocked": -1,
"dns": -1,
"connect": -1,
"send": 0,
"wait": 304,
"receive": 34
},
"serverIPAddress": ""
},
...
]
}
}
PhantomJS是一个功能强大的无头浏览器,可以进行网络监控等自动化任务。通过编写JavaScript脚本,即可捕获HTTP请求和响应,并生成HAR文件进行分析和优化。可以考虑将PhantomJS结合其他工具,实现更加复杂的自动化任务。