Passer des arguments à la page.évaluer
Je suis l'aide de PhantomJS page.evaluate() pour faire de grattage. Mon problème est que le code que j'ai passer à la page webkit est en bac à sable, et donc n'a pas accès aux variables de mes principaux fantôme de script. Il est difficile de faire le raclage du code générique.
page.open(url, function() {
var foo = 42;
page.evaluate(function() {
//this code has no access to foo
console.log(foo);
});
}
Comment ai-je pu pousser des arguments dans la page?
- Je crois que vous pouvez trouver cette réponse est plus suffisante: stackoverflow.com/questions/28524130/...
Vous devez vous connecter pour publier un commentaire.
J'ai eu ce problème exact. Il peut être fait avec un peu de ruse, parce que
page.evaluate
peut également accepter une chaîne.Il y a plusieurs façons de le faire, mais j'utilise un wrapper appelé
evaluate
, qui accepte des paramètres supplémentaires à transmettre à la fonction qui doit être évaluée sur la webkit côté. Vous pouvez l'utiliser comme ceci:Et voici le
evaluate()
fonction:Le changement a été poussé et maintenant vous pouvez l'utiliser comme
La pousser les détails sont ici: https://github.com/ariya/phantomjs/commit/81794f9096
Il est la solution qui fonctionne avec PhantomJS 0.9.2 et 0.2.0:
Une autre possibilité: passer les variables dans l'url. Par exemple, pour passer de l'objet x
page.evaluate()
est en bac à sable.Vous pouvez passer dans les arguments de la fonction en tant qu'arguments à la page.évaluer.
Exemple:
Cela fonctionne pour moi:
Moyens à mettre le tout comme une chaîne de caractères. De toute façon, plus tard, il est devenu une chaîne de caractères. De vérifier la source de bibliothèque.
Ne pouvez-vous pas simplement lier les arguments de la fonction??
Alors que vous pouvez passer des arguments dans évaluer(fonction, arg1, arg2, ...), c'est souvent un peu lourd. En particulier dans les cas lors du passage de plusieurs variables, ou pire, des fonctions.
Pour contourner cet obstacle, on peut utiliser injectJs(nom de fichier) à la place.
Où
my_extra_functionality.js
est un fichier dans le même répertoire: