从 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();
});
我几天前开始使用 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();
});