2013-03-08 55 views
11

经过几个小时的无果搜索,我在这里发帖。 PhantomJS不允许我在下面的代码中使用变量,并在运行脚本“无法找到变量”时出现错误消息。找不到变量 - 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();  

    } 

}) 

感谢=)

+0

“myElem”的定义在哪里? – 2013-03-08 20:44:17

+0

我已经更新了我的代码,以显示myElem的定义:) – Antoine 2013-03-08 21:35:34

回答

19

有信息在Quick Start教程的一个重要部分(在其代码评价部分):

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

与您的代码的问题是这样双重的:

  1. 变量elem在网页环境之外初始化,它不是从第二evaluate到达。
  2. 您返回一个非简单对象,即DOM元素。

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

+2

不错的工作!有趣的是,你有唯一的答案,你的姓氏意味着“指导” – pythonian29033 2016-07-07 13:37:15

+1

我仍然不知道如何实现它。我有一个案例来访问page.evaluate()中的变量。我想根据传递给evaluate()的String来查找DOM元素。你能告诉我/指向我的代码? – rohit12sh 2017-04-18 20:01:12

+1

“请仔细阅读所有相关文档(...)” - 是吧?例如。 “我不会告诉你......” – 2017-08-28 13:53:43

相关问题