使用 PhantomJS 记录点击触发的 GET 请求
Log GET requests triggered by clicks using PhantomJS
我有一个简单的网络应用程序(发音指南),它以链接的形式显示术语列表。当用户点击其中一个时,它会触发音频播放器播放发音。
所以有一个点击事件会触发一个GET请求来获取音频文件,然后由播放器加载并播放。
我想记录所有 GET 请求,看看是否全部成功。我正在尝试使用 PhantomJS 来这样做。我拼凑了这个:
var page = require('webpage').create(),
system = require('system'),
address = "http://d-college.cengage.com/demos/pronuncation_guide/index.html"
page.onResourceRequested = function (req) {
console.log('requested: ' + JSON.stringify(req, undefined, 4));
};
page.onResourceReceived = function (res) {
console.log('received: ' + JSON.stringify(res, undefined, 4));
};
page.open(address, function (status) {
if (status !== 'success') {
console.log('FAIL to load the address');
}
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
page.evaluate(function() {
$("a").click();
});
phantom.exit()
});
});
这确实成功记录了页面加载时的所有资产,以及包含的 jquery。但后来我得到:
Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL file://clicklog.js. Domains, protocols and ports must match.
我认为这本身并不是真正的错误(参见:CasperJS and 'Unsafe JavaScript attempt to access frame with URL' error),我也不认为它会导致程序呕吐。
但是点击发生了吗?为什么没有记录生成的 GET 请求?
那些打印的 Unsafe... 行是 1.9.8 中引入的错误,仅在 phantom.exit()
期间发生。它不会干扰脚本的其余部分。
您可能没有看到这些请求,因为您退出得太早了。我的理解是 Unsafe... 行是在您退出时仍然执行某些操作时打印的。当您单击 link 并立即退出时,这适合您的情况。您应该至少让页面通过延迟 exit
和 setTimeout
:
来发送请求
page.evaluate(...);
setTimeout(function(){
phantom.exit();
}, 1000);
我有一个简单的网络应用程序(发音指南),它以链接的形式显示术语列表。当用户点击其中一个时,它会触发音频播放器播放发音。
所以有一个点击事件会触发一个GET请求来获取音频文件,然后由播放器加载并播放。
我想记录所有 GET 请求,看看是否全部成功。我正在尝试使用 PhantomJS 来这样做。我拼凑了这个:
var page = require('webpage').create(),
system = require('system'),
address = "http://d-college.cengage.com/demos/pronuncation_guide/index.html"
page.onResourceRequested = function (req) {
console.log('requested: ' + JSON.stringify(req, undefined, 4));
};
page.onResourceReceived = function (res) {
console.log('received: ' + JSON.stringify(res, undefined, 4));
};
page.open(address, function (status) {
if (status !== 'success') {
console.log('FAIL to load the address');
}
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
page.evaluate(function() {
$("a").click();
});
phantom.exit()
});
});
这确实成功记录了页面加载时的所有资产,以及包含的 jquery。但后来我得到:
Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL file://clicklog.js. Domains, protocols and ports must match.
我认为这本身并不是真正的错误(参见:CasperJS and 'Unsafe JavaScript attempt to access frame with URL' error),我也不认为它会导致程序呕吐。
但是点击发生了吗?为什么没有记录生成的 GET 请求?
那些打印的 Unsafe... 行是 1.9.8 中引入的错误,仅在 phantom.exit()
期间发生。它不会干扰脚本的其余部分。
您可能没有看到这些请求,因为您退出得太早了。我的理解是 Unsafe... 行是在您退出时仍然执行某些操作时打印的。当您单击 link 并立即退出时,这适合您的情况。您应该至少让页面通过延迟 exit
和 setTimeout
:
page.evaluate(...);
setTimeout(function(){
phantom.exit();
}, 1000);