web-dev-qa-db-fra.com

Phantom.js capture-t-il tous les AJAX?

J'ai une application dorsale qui a une tonne d'AJAX. (chaque chargement de page entraîne 5 à 6 appels ajax) car j'ai plusieurs vues et vues internes dans ces vues,

si je lance Phantom.js, puis-je obtenir le résultat final en HTML? 

Le résultat final est ce que l'utilisateur voit après tous mes appels ajax.

25
TIMEX

PhamtonJs est un WebKit sans tête avec une API JavaScript. Lors de l'exploration d'une page, PhatomJs télécharge toutes les requêtes de personnes à charge, telles que images, js, css, etc. Cependant, le rappel onLoaded est appelé à la fin du chargement de la page, et non en l'absence de demandes en attente. Donc, vous devez utiliser un truc pour cela.

Il y a deux façons de résoudre le problème:

  • Attendez que "quelque chose" ait effectivement changé dans votre page (un élément). Le meilleur exemple est waitFor.js
  • Attendez quelques secondes jusqu'à ce qu'aucune demande n'ait été reçue.
35
Cybermaxs

Phantom.js est capable d’exécuter le javascript dans votre page, cela devrait donc fonctionner. Il y a un article décrivant comment donner aux crawlers de belles versions de sites javascript à l'aide de Phantom.js.

Assurez-vous de donner à Phantom.js suffisamment de temps pour terminer les appels ajax, car ce thread décrit .

11
sbridges

Vous pouvez utiliser $ .active avec le script waitFor.js qui renvoie le no de connexion active à un serveur et nous devons attendre qu'il soit égal à 0 pour que toutes les demandes soient complètes.

Plus d'infos: Fonction jQuery.active

1
Naga Kiran

Si vous avez accès aux codes javascript du site Web, mis à part waitFor(), je pense que vous pouvez rendre vos demandes ajax synchrones. C'est parfois plus simple et plus précis. 

0
iplus26