Où sont les captures d'écran phantom.js sauvé?
Commence tout juste avec la Phantom.js après l'installation via Homebrew sur mon mac.
Je suis en train d'essayer les exemples d'enregistrer des captures d'écran de sites internet par le biais https://github.com/ariya/phantomjs/wiki/Quick-Start
var page = require('webpage').create();
page.open('http://google.com', function () {
page.render('google.png');
phantom.exit();
});
Mais je ne vois pas les images n'importe où. Vont-ils être dans le même répertoire que le .fichier js?
A obtenu des autorisations d'écriture?
Comment puis-je savoir cela?
Comment puis-je savoir cela?
OriginalL'auteur Adam Grant | 2013-03-04
Vous devez vous connecter pour publier un commentaire.
PhantomJS habituellement rend les images dans le même répertoire que le script que vous êtes en cours d'exécution. Donc, oui, il doit être dans le même répertoire que le fichier JavaScript que vous êtes en cours d'exécution à l'aide de PhantomJS.
MODIFIER
Il semble que l'exemple particulier est erronée. Le problème est que
page.render(...);
faut un certain temps pour afficher la page, mais vous êtes d'appelphantom.exit()
avant qu'il ait fini de rendre. J'ai été en mesure d'obtenir les résultats attendus par le faire:Malheureusement, ce n'est pas l'idéal, j'ai donc été en mesure de venir avec quelque chose qui est un poil mieux. Je dis un "poil", parce que je suis fondamentalement d'interrogation pour voir quand la page a fini de rendu:
Le code ci-dessus fonctionne, car le rappel n'est pas exécutée immédiatement. Donc, les bureaux de code de début et de commencer à l'interroger. Puis, quand le rappel est exécuté, nous vérifions pour voir l'état de la page (que nous ne voulons rendre si nous étions en mesure de charger la page avec succès). Puis nous le rendu de la page et définissez l'indicateur que notre interrogation code de contrôle, à
true
. Alors la prochaine fois les bureaux de code s'exécute, le drapeau esttrue
et ainsi de nous quitter.Ce qui semble être un problème avec la façon dont PhantomJS est en cours d'exécution de la
webpage#render(...)
appel. Je me doutais bien que c'était un appel non bloquant, mais, selon l'auteur, dans ce problème, c'est un appel bloquant. Si j'avais une supposition de danger, peut-être la loi de rendu est un appel bloquant, mais le code qui fait le rendu pourrait être de transférer les données vers un autre thread, qui gère la persistance des données sur le disque (cette partie peut être un appel non bloquant). Malheureusement, cet appel est probablement toujours en cours d'exécution lors de l'exécution revient au script principal et exécutephantom.exit()
, ce qui signifie que ledit code asynchrone n'est jamais une chance de finir ce qu'il fait.J'ai été en mesure de trouver un post sur le PhantomJS forums qui traite avec ce que vous décrivez. Je ne peux pas voir toute question qui a été déposé, donc si vous voulez vous pouvez aller de l'avant et l'après.
Vous pouvez poster votre code? Ensuite, nous devrions être en mesure de voir ce qu'il se passe.
Il est directement copier-coller des exemples ici: github.com/ariya/phantomjs/wiki/Quick-Start
J'ai posté un exemple.
J'ai mis à jour ma réponse.
OriginalL'auteur Vivin Paliath
J'ai le même problème que l'auteur de ce post, et aucun des exemples de code a fonctionné pour moi. Type de désorienter le deuxième exemple dans Phantom.js la documentation ne pas fonctionner. Installé à l'aide de bière Maison sur Snow Leopard.
J'ai trouvé un exemple de travail
onLoadFinished
callback avant appeleropen()
, juste pour être sûr. 🙂Je pense qu'il y a encore un problème que la sortie peut se produire avant son rendu terminé, donc cela ne fonctionne pas pour moi, mais il ne fonctionnera que si je le combiner avec la solution ci-dessus, et de le mettre dans une fonction setTimeout. Il se sent comme il y a 2 problèmes. 1) attendre jusqu'à ce que la page est chargée avant le rendu et 2) attendre jusqu'à ce que le rendu soit terminée avant de quitter. Est-il logique (newbie avec le fantôme) ?
OriginalL'auteur Caleb G
Juste une aide rapide pour les gens qui viennent ici à la recherche pour le répertoire où PhantomJS ou CasperJS captures d'écran sont enregistrées: il est dans le répertoire de scripts par défaut. Toutefois, vous avez le contrôle.
Si vous souhaitez contrôler où ils sont enregistrés, vous pouvez simplement modifier le nom de fichier comme ceci:
Ou si vous utilisez CasperJS, vous pouvez utiliser:
Espère que cela sauve quelqu'un les ennuis!
OriginalL'auteur Stan Smulders
Je ne sais pas si quelque chose a changé, mais l'exemple sur http://phantomjs.org/screen-capture.html a bien fonctionné pour moi:
Je suis en cours d'exécution phantomjs-2.1.1-windows.
Cependant, ce qui m'a conduit à ce fil était d'abord le fichier image n'a jamais été se créé sur mon disque tout comme la question d'origine. J'ai pensé que c'était une sorte de problèmes de sécurité, donc je suis connecté sur une machine virtuelle et a commencé par le fait de tout mettre dans le même répertoire. J'ai été en utilisant un fichier de commandes pour le coup d'envoi phantomjs.exe avec mon .js fichiers transmis en tant que paramètre. Avec tous les fichiers dans le même répertoire sur ma VM, il a travaillé beaucoup. Par essai et erreur, j'ai trouvé que mon fichier de commandes devaient être dans le même répertoire que mon .fichier js. Maintenant tout est bien sur mon ordinateur hôte.
Donc en résumé...c'était probablement un problème lié à la sécurité pour moi. Pas besoin de l'ajout de tout type de délai d'attente.
Ma réponse à la question initiale, SI vous avez tout configuré correctement, le fichier sera dans le même répertoire que le .fichier js qui phantomjs.exe s'exécute. J'ai essayé de spécifier un chemin d'accès complet du fichier image, mais cela ne semble pas fonctionner.
OriginalL'auteur Justin Pavatte
La cause est que la page.render() peut ne pas être prêt pour le rendu de l'image, même pendant la onLoadFinished() de l'événement. Vous devrez peut-être attendre jusqu'à plusieurs secondes avant que la page.render() peut réussir. Le seul moyen que j'ai trouvé pour afficher une image dans PhantomJS est à plusieurs reprises d'appeler la page.render() jusqu'à ce que la méthode retourne true, indiquant qu'il est correctement rendu de l'image.
Solution:
render
est documenté comme{void}
. Je n'ai pas vraiment rencontré un problème avec le rendu. Peut-être que cela est dû à une version antérieure ou le fait que je suis sur windows et linux.Pouvez-vous compter combien de fois il tombe en panne avant que cela fonctionne?
OriginalL'auteur Rich Kuzsma
Voler rasterize.js exemple, il fonctionne beaucoup plus fiables que les accepté de répondre pour moi.
OriginalL'auteur Paul L
Beaucoup de bonnes suggestions ici. La seule chose que je voudrais ajouter:
J'ai été l'exécution d'un phantomjs menu fixe et de l'image d'utilisateur par défaut est "phantomjs", pas de racine. J'ai donc essayer d'écrire à un endroit que je n'avais pas la permission (c'était la ddt sur le panneau d'accueil)...
Les code(s) au-dessus de tous les exécuter sans erreur, mais si ils n'ont pas l'autorisation d'écrire à la destination, puis ils vont ignorer en silence la demande...
Ainsi, par exemple, en prenant @vivin-paliath du code (l'actuel accepté de répondre):
Et en l'exécutant en tant qu'utilisateur par défaut produit:
Mais pas
google.png
et pas d'erreur. Simplement en ajoutant-u root
pour le panneau de commande résout ce problème, et j'ai l'google.png
dans mon MDC.Pour l'exhaustivité, la commande finale:
OriginalL'auteur pelson