D'enregistrer et d'effectuer le rendu d'une page web avec PhantomJS et node.js
Je suis à la recherche d'un exemple de demander une page web, en attente pour le JavaScript pour le rendu (JavaScript modifie le DOM), et puis de saisir le code HTML de la page.
Cela devrait être un exemple simple avec une évidente cas d'utilisation pour PhantomJS. Je ne peux pas trouver un travail décent exemple, la documentation semble être tout au sujet de la ligne de commande utilisation.
- Vous êtes à la recherche pour ce faire côté client ou côté serveur?
- serverside je pense? Infoclient obligerait l'utilisateur à installer fantôme de droit? Qui ne fonctionnent pas si je comprends bien. Merci
- De quoi êtes-vous tenter de le faire avec le html une fois que vous l'avez? Essayer d'obtenir ma tête autour de ce que vous essayez d'atteindre. Phantomjs a la manipulation dom voir code.google.com/p/phantomjs/wiki/QuickStart#DOM_Manipulation êtes-vous puis allez envoyer ce quelque part?
- le cas d'utilisation est la création d'un cache html statique copie d'une application javascript vue pour les moteurs de recherche. Je veux être en mesure de s'exécuter par programmation via mon sitemap, et enregistrer une version html de chaque lien.
- ouais c'page liée est le genre de chose dont j'ai besoin, j'aimerais juste un exemple de comment le faire de nœud. Merci
- Ce faisant, ce côté client n'est pas possible?
Vous devez vous connecter pour publier un commentaire.
De vos commentaires, je suppose que vous avez 2 options
Edit:
Il semble que le processus enfant est suggéré par phantomjs comme un moyen d'interagir avec le noeud, voir faq - http://code.google.com/p/phantomjs/wiki/FAQ
Edit:
Exemple Phantomjs script pour obtenir les pages de balisage HTML:
Avec la v2 de
phantomjs-node
il est assez facile d'imprimer le code HTML après qu'il a été traité.Cela affiche la sortie comme il aurait été rendue avec le navigateur.
Modifier 2019:
Vous pouvez utiliser
async/await
:Ou si vous voulez juste pour tester, vous pouvez utiliser
npx
J'ai utilisé de deux manières différentes dans le passé, y compris de la page.evaluate() méthode qui interroge les DOM que Declan mentionné. L'autre façon dont je l'ai transmis l'info à partir de la page web est de cracher à la console.log() à partir de là, et dans le phantomjs utiliser un script:
Je pourrais aussi piège de la variable msg dans la onConsoleMessage et de recherche pour certains encapsuler les données. Dépend de comment vous voulez utiliser la sortie.
Puis dans la Nodejs script, vous devez analyser la sortie de la Phantomjs script:
Espère que ça aide certains.
Pourquoi ne pas l'utiliser ?
La fin de la mise à jour au cas où quelqu'un trébuche sur cette question:
Un projet sur GitHub développé par un de mes collègues exactement vise à vous aider à le faire: https://github.com/vmeurisse/phantomCrawl.
Encore un peu jeune, ce n'est certainement manquant un peu de documentation, mais l'exemple fourni devrait aider à faire de base de l'analyse.
Voici une vieille version que j'utilise le noeud en cours d'exécution, d'exprimer et de phantomjs qui enregistre la page en tant que .png. Vous pourriez ajuster assez rapidement pour obtenir le code html.
https://github.com/wehrhaus/sitescrape.git