Übergeben Sie Argumente mit page.evaluate
Ich bin mit PhantomJS Seite.evaluate (), um einige der Schaben. Mein problem ist, dass der code, den ich-pass-auf die webkit-Seite in der Sandbox und hat damit keinen Zugriff auf die Variablen von meinem Haupt-phantom-Skript. Dies macht es schwer machen, die Schaben code generisch.
page.open(url, function() {
var foo = 42;
page.evaluate(function() {
//this code has no access to foo
console.log(foo);
});
}
Wie könnte ich push-Argumente in die Seite?
InformationsquelleAutor der Frage TheFist | 2012-03-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe das genaue problem. Es kann getan werden, mit ein wenig Trickserei, weil
page.evaluate
auch akzeptieren kann, der einen string.Gibt es mehrere Möglichkeiten, es zu tun, aber ich nutze ein wrapper genannt
evaluate
die akzeptiert, zusätzliche Parameter zu übergeben, um die Funktion ausgewertet werden muss, auf der webkit-Seite. Verwenden Sie es wie folgt:Und hier ist die
evaluate()
Funktion:InformationsquelleAutor der Antwort Weston
Die änderung gedrängt wurde, und jetzt können Sie es als
Push details sind hier: https://github.com/ariya/phantomjs/commit/81794f9096
InformationsquelleAutor der Antwort Bala Anirudh
Andere Möglichkeit: die übergabe der Variablen mit der url. Zum Beispiel, zu übergeben Objekt x
InformationsquelleAutor der Antwort Aakil Fernandes
Es ist die Lösung, die arbeitet mit PhantomJS 0.9.2 und 0.2.0:
InformationsquelleAutor der Antwort Tomas Randus
Die Sie übergeben können, die Argumente, die der Funktion als Argumente zu Seite.bewerten.
Beispiel:
InformationsquelleAutor der Antwort YTL
Diese funktioniert bei mir:
Mittel, um alles als ein string. Sowieso später wird es zu einem string. Überprüfen Sie die Bibliothek source.
InformationsquelleAutor der Antwort Tomas Randus
Kann man nicht nur binden Sie die Argumente der Funktion??
InformationsquelleAutor der Antwort user2977636
Während Sie können Argumente übergeben, die in auswerten(Funktion, arg1, arg2, ...)dies ist oft ein wenig umständlich. Besonders in Fällen, wenn man mehrere Variablen, oder schlimmer noch, Funktionen.
Um dieses Hindernis zu umgehen, kann man injectJs(mit dem Namen) statt.
Wo
my_extra_functionality.js
ist eine lokale Datei im gleichen Verzeichnis:InformationsquelleAutor der Antwort ChickenFeet