从 PhantomJS onLoadFinished 回调调用函数

Calling a function from PhantomJS onLoadFinished callback

我几天前开始使用 PhantomJS 和 NodeJS。 我正在使用这个库与之集成:https://github.com/amir20/phantomjs-node。 一切正常,但是当我尝试在页面加载后(从回调中)继续我的应用程序时,出了点问题。

function doStuff ()
{
    page.open("http://whosebug.com/")
        .then(function (status) {
                function responseHandler(status) {
                    console.log("loaded");
                    iAmHere();
                    console.log("Here Again");
                }

                function loginAction() {
                    var btn = document.querySelector("#button");
                    btn.click();
                }

                page.property('onLoadFinished', responseHandler);
                page.evaluate(loginAction)
            }
    );
}


function iAmHere (){
    console.log("iAmHere");
}

#button 元素触发了一些页面加载,调用了 responseHandler 函数,输出为:

info: loaded

并且函数 iAmHere 根本没有被调用,调用后的日志也没有。 我做错了什么?

谢谢!

iAmHere()onLoadFinished 事件触发时未被调用的原因是因为您提供的函数 responseHandler 实际上是由 PhantomJS JavaScript 引擎,而不是Node.js。

因此,它无法访问您在 Node.js 脚本中定义的 iAmHere() 函数。

您可以改为在页面完成加载时收到通知,如下所示:

var phantom = require('phantom');

var sitepage = null;
var phInstance = null;
phantom.create()
    .then(instance => {
        phInstance = instance;
        return instance.createPage();
    })
    .then(page => {
        sitepage = page;
        return page.open('https://whosebug.com/');
    })
    .then(status => {
        console.log(status);

        // Page loaded, do something with it

        return sitepage.property('content');
    })
    .then(content => {
        console.log(content);
        sitepage.close();
        phInstance.exit();
    })
    .catch(error => {
        console.log(error);
        phInstance.exit();
    });