【问题标题】:PhantomJS - page.evaluate is not a functionPhantomJS - page.evaluate 不是一个函数
【发布时间】:2017-10-19 16:10:14
【问题描述】:
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 在 在 process._tickCallback (internal/process/next_tick.js:188:7)

为什么会在这种情况下发生?

节点版本:v8.6.0

Npm 版本:5.3.0

幻影版:phantom@4.0.5

【问题讨论】:

    标签: javascript node.js phantomjs


    【解决方案1】:

    您遇到的问题是 page.open() 不返回页面 - 它返回状态。所以传递给下一个then() 的值是状态,您尝试对其调用评估。这当然行不通。

    他们在example 中处理此问题的方式是在then() 链之外有一个页面变量,他们可以在每个then() 内部访问该变量。你几乎用_page = page; 来做这件事如果_page 是在函数外部定义的,你应该能够调用_page.evaluate() 而不是在open() 的返回值上调用它。

    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 () {
    

    【讨论】:

    • 是的,就是这样!谢谢!
    • 我的问题已解决,但现在,在 _page.evaluate(function() { 我无法打印任何内容,似乎有任何错误...我试图抛出错误但没有成功。知道为什么吗?
    • 是的,这有点棘手 - 您在 evaluate() 中运行的代码是在您正在评估的页面的上下文中运行的。这里有一个关于这个问题的好帖子:stackoverflow.com/questions/16701208/…
    • @Mark_M page.set('paperSize', {format: 'A4', orientation: 'portrait'}); page.set 不是函数有什么想法吗?
    猜你喜欢
    • 2012-09-15
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多