使用PhantomJS记录点击触发的GET请求

时间:2015-01-07 17:43:48

标签: dom get click window 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请求?

1 个答案:

答案 0 :(得分:1)

那些打印的不安全...... 行是1.9.8中引入的错误,仅在phantom.exit()期间发生。它不会干扰脚本的其余部分。

您可能没有看到这些请求,因为您过早退出。我的理解是,当你退出时还有一些东西被执行时,会打印 Unsafe ... 行。当您单击链接并立即退出时,这适合您的情况。您应该通过将exit延迟setTimeout来让页面至少发送请求:

page.evaluate(...);
setTimeout(function(){
    phantom.exit();
}, 1000);