2013-03-12 17 views
18

Czy jest możliwe przekazanie zmiennych w page.evaluate w moim przypadku poniżej?Przekazywanie zmiennej na 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(); } 

}); 

} 

Próbowałem kilku metod znalezionych w Internecie, ale nic nie jest praktycznie niemożliwe, aby dostać się do jego zmiennych.

Z góry dziękuję za pomoc :)

Odpowiedz

62

jak zwykle, odpowiedź jest wyraźnie powiedziane w documentation z evaluate funkcji:

Od PhantomJS 1,6, JSON serializacji argumenty mogą być przekazywane do funkcji. W poniższym przykładzie wyodrębniana jest wartość tekstowa elementu DOM. Poniższy przykład osiąga ten sam cel końcowy, jak w poprzednim przykładzie, ale element jest wybierany na podstawie selektora który jest przekazywany do wywołania ocenić:

poniższym przykładzie zademonstrowano użycie:

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

To nie to, co chcę zrobić, to chcę, aby być w stanie dostać się do zmiennych przekazanych jako parametry do mojej funkcji. – Antoine

+7

Czy przeanalizowałeś i spróbowałeś mojej odpowiedzi? Wierzę, co chcesz zrobić: page.evaluate (funkcja (arg1, arg2) {console.log (arg1 + arg2);}, arg1, arg2) ;. –

+1

Tak, chcę to zrobić! Dziękuję bardzo! : D – Antoine

2

mam phantomjs 1.5.0, więc zamiast kompilacji 1.6 lub wyższą wersję poszedłem do alternatywnego rozwiązania:

więc mam zapisane argumenty selectors.js plik

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

a następnie wstrzykuje się je do strony:

page.injectJs("selectors.js"); 

Więcej szczegółów można znaleźć tutaj: http://phantomjs.org/api/webpage/method/inject-js.html

Powiązane problemy