将变量传递给page.evaluate - PhantomJS

时间:2013-03-12 08:17:00

标签: phantomjs

是否有可能在页面中传递变量。在我的情况下,我的情况下是什么?

function myFunction(webpage, arg1, arg2){

var page = require('webpage').create();

page.viewportSize = { width: 1920, height: 1080 };

page.open(webpage, function (status){

    if (status == 'success') {

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

                page.evaluate(function(){

                    arg = arg1 + arg2;
                    console.log(arg);

                });

            });

    } 

    else { phantom.exit(); }

});

}

我尝试了在互联网上找到的几种方法,但实际上没有什么方法可以得到它的变量。

提前感谢您的帮助:)

3 个答案:

答案 0 :(得分:67)

像往常一样,答案在evaluate var title = page.evaluate(function(s) { return document.querySelector(s).innerText; }, 'title'); console.log(title); 函数的documentation中明确说明:

  

从PhantomJS 1.6开始,JSON可序列化的参数可以传递给函数。在以下示例中,提取DOM元素的文本值。以下示例实现与前一示例相同的最终目标,但该元素是基于传递给evaluate调用的选择器选择的:

以下示例演示了用法:

{{1}}

答案 1 :(得分:2)

我有phantomjs 1.5.0,所以我没有编译1.6或更高版本,而是寻求替代解决方案:

所以我保存了selectors.js文件的参数

-------------selectors.js starts----------------
var selectors = "div.nice"
-------------selectors.js   ends----------------

然后将它们注入页面:

page.injectJs("selectors.js");

可在此处找到更多详细信息:http://phantomjs.org/api/webpage/method/inject-js.html

答案 2 :(得分:0)

我使用幻像4.0.4,以下对我有用的https://www.npmjs.com/package/phantom

var arg = 'test'
page.evaluate(function(arg) {
    console.log(arg)
}, arg);