2013-03-12 85 views
18

是否有可能在下面我的情況下在page.evaluate中傳遞變量?將變量傳遞給page.evaluate - 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(); } 

}); 

} 

我嘗試了幾種在互聯網上找到的方法,但實際上沒有任何辦法可以達到它的變量。

預先感謝您的幫助:)

回答

62

像往常一樣,答案documentationevaluate的功能是明確提出:

截至PhantomJS 1.6,JSON序列化的參數可以傳遞到功能。在下面的例子中,DOM元素的文本值被提取。下面的示例實現相同的最終目標與前面的示例,但該元件是根據被傳遞到評估呼叫的選擇器中選擇:

下面的示例說明了使用:

var title = page.evaluate(function(s) { 
    return document.querySelector(s).innerText; 
}, 'title'); 
console.log(title); 
+3

這不是我想做的事,我希望能夠去爲傳遞變量參數給我的功能。 – Antoine 2013-03-12 08:59:34

+7

你甚至分析和嘗試我的答案?我相信你想要做的是:page.evaluate(函數(arg1,arg2){console.log(arg1 + arg2);},arg1,arg2);. – 2013-03-12 09:33:43

+1

是的,我想要那樣做!非常感謝你 ! :D – Antoine 2013-03-12 09:57:48

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