【问题标题】:Can't find variable - PhantomJS找不到变量 - PhantomJS
【发布时间】:2013-02-24 12:35:41
【问题描述】:

经过数小时无果的搜索后,我在此发布。 PhantomJS 不允许我使用下面代码中的变量,运行脚本时出现错误消息“找不到变量”。

你知道我的问题在哪里吗?

page.open(myurl, function (status) {

    if (status == 'success') {

        page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js", function() {

            elem = page.evaluate(function () {

                /* Select one element with jQuery */
                myElem = $('body');
                return myElem;

            })

            var elemHtml   = page.evaluate(function() { return $(elem).html(); });
            console.log(elemHtml);

        })

        phantom.exit();     

    }  

})

谢谢 =)

【问题讨论】:

  • myElem 定义在哪里?
  • 我已经更新了我的代码,以便向您展示 myElem 的定义:)

标签: javascript phantomjs


【解决方案1】:

Quick Start 教程(在其代码评估部分)中有一条重要信息:

要在网页上下文中评估 JavaScript 或 CoffeeScript 代码,请使用 evaluate() 函数。执行是“沙盒”的,代码无法访问其自身页面上下文之外的任何 JavaScript 对象和变量。可以从evaluate()返回一个对象,但是它仅限于简单的对象,不能包含函数或闭包。

因此,您的代码存在双重问题:

  1. 变量elem 在网页上下文之外初始化,无法从第二个evaluate 访问。
  2. 您返回一个非简单对象,即一个 DOM 元素。

这是一个很容易解决的问题,主要是通过适当地设计代码以适应实际的“监禁”执行模型。请仔细阅读所有相关文档并探索大量included examples

【讨论】:

  • 干得好!有趣的是,你有唯一的答案,而你的姓氏恰好是“指导”的意思
  • 我仍然不确定如何实现它。我有一个案例可以访问 page.evaluate() 中的变量。我想根据传递给评估()的字符串找到 DOM 元素。你能告诉我/指向我的代码吗?
  • "请仔细阅读所有相关文档 (...)" - 嗯?例如。 “我不会告诉你……”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-11
  • 2015-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-17
  • 2012-11-13
相关资源
最近更新 更多