PhantomJS - page.evaluate不是一个函数

时间:2017-10-19 16:10:14

标签: javascript node.js phantomjs

var phantom = require('phantom');

phantom.create()
        .then(function (ph) {
            _ph = ph;
            return ph.createPage();
        })
        .then(function(page) {
            _page = page;
            url = "http://www.aeiou.pt";
            return page.open(url);
        })
        .then(function(page) {

        console.log("hello3");
            page.evaluate(function () {

我的代码以这样的东西开头。打印console.log“hello3”但是,​​它给了我错误:

  

TypeError:page.evaluate不是函数       在/home/someone/server123.js:58:11       在       at process._tickCallback(internal / process / next_tick.js:188:7)

为什么会出现这种情况?

节点版本:v8.6.0

Npm版本:5.3.0

幻影版:phantom@4.0.5

1 个答案:

答案 0 :(得分:2)

您遇到的问题是page.open()没有返回页面 - 它会返回状态。因此,传递给下一个then()的值是状态,您尝试在其上调用evaluate。当然,这不起作用。

他们在example处理此问题的方式是在then()链之外有一个页面变量,他们可以在每个then()内访问。您几乎是在_page = page;执行此操作如果在函数外定义了_page,您应该能够调用_page.evaluate()而不是从open()返回值调用它。 / p>

var phantom = require('phantom');
var _page;

phantom.create()
    .then(function (ph) {
        _ph = ph;
        return ph.createPage();
    })
    .then(function(page) {
        _page = page;
        url = "http://www.aeiou.pt";
        return page.open(url);
    })
    .then(function(status) {
        // check status for errors here
        console.log("hello3");
        _page.evaluate(function () {