6 votes

PhantomJS et obtention du DOM modifié

Je suis en train de développer un outil qui doit télécharger une page web à partir d'un serveur tiers, l'exécuter comme le ferait un navigateur, puis analyser le HTML. Ce qui me pose problème, c'est que l'outil doit analyser le HTML après l'exécution de tout le javascript et la modification du DOM. J'essaie d'utiliser PhantomJS dans ce but et cela fonctionne sur de petits bouts de code (juste un petit document html avec du javascript externe qui ajoute quelques nœuds au DOM) mais quand je fais la même chose avec un vrai site ( http://www.dba.dk/ ) Je n'obtiens pas le HTML final après toutes les modifications effectuées par le code js.

J'ai vraiment besoin d'aide à ce sujet car je suis bloqué depuis plus d'une semaine.

Mon code PhantomJS est simple :

if (phantom.state.length === 0) {
     if (phantom.args.length === 0) {
             console.log('Usage: test.js <some URL>');
             phantom.exit();
     } else {
             var address = phantom.args[0];
             phantom.state = Date.now().toString();
             phantom.viewportSize = { width: 1280, height: 800 };
             phantom.open(address);
     }
} else {
     var elapsed = Date.now() - new Date().setTime(phantom.state);
     if (phantom.loadStatus === 'success') {
             if (!first_time) {
                     var first_time = true;
                     if (!document.addEventListener) {
                             console.log('Not SUPPORTED!');
                     }
                     phantom.render('result.png');
                     var markup = document.documentElement.innerHTML;
                     console.log(markup);
                     phantom.exit();
             }
     } else {
             console.log('FAIL to load the address');
             phantom.exit();
     }
}

le HTML envoyé à la console ne contient pas de contenu généré dynamiquement.

3voto

intellion Points 1357

Le problème se situait au niveau du plugin Flash. Les pages détectaient son absence. Une fois qu'il a été chargé correctement, le problème a disparu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X