将变量传递给page.evaluate - PhantomJS

Ant*_*ine 22 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(); }

});

}
Run Code Online (Sandbox Code Playgroud)

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

预先感谢您的帮助 :)

Ari*_*yat 68

像往常一样,答案在功能文档中明确说明evaluate:

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

下面的示例演示了用法:

var title = page.evaluate(function(s) {
    return document.querySelector(s).innerText;
}, 'title');
console.log(title);
Run Code Online (Sandbox Code Playgroud)

  • 在玩它之前我也有点被抛弃了.我相信这更清楚:`page.evaluate(function(str,obj){...},'myString',{foo:'bar'});` (10认同)
  • 你有没有分析并尝试我的答案?我相信你想要做的是:page.evaluate(function(arg1,arg2){console.log(arg1 + arg2);},arg1,arg2);. (7认同)
  • 我知道这个答案来自2013年,但它确实应该进行编辑,以便评论中解释的语法是答案本身所示的语法,以便2017年(或更晚的=)的访问者不必阅读获得*实际*答案的评论主题. (4认同)
  • 这不是我想要做的,我希望能够将作为参数传递给我的函数的变量. (3认同)