Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does Phantom.js capture all AJAX?

I have a backbone app that has a ton of AJAX. (each page load results in 5-6 ajax calls) because I have many views and internal views within those views,

if I run Phantom.js, can I get the final html result?

Final result is what the user sees after all my ajax calls run.

like image 915
TIMEX Avatar asked Feb 07 '13 09:02

TIMEX


3 Answers

PhamtonJs is a headless WebKit with JavaScript API. When crawling a page, PhatomJs will download all dependants requests such as images, js, css... It will also executes JS and ajax calls. However the onLoaded callback is invoked when the page finishes the loading, not when there are no pending requests. So, you have to use a trick for this.

There are two way to solve the problem :

  • Wait until "something" effectively changed in you page (an element). The best example is waitFor.js
  • Wait a few seconds until no requests were received.
like image 187
Cybermaxs Avatar answered Nov 14 '22 02:11

Cybermaxs


Phantom.js is able to run the javascript in your page, so this should work. There is an article describing how to give crawlers nice versions of javascript sites using Phantom.js.

Be sure to give Phantom.js enough time to complete the ajax calls, as this thread describes.

like image 35
sbridges Avatar answered Nov 14 '22 04:11

sbridges


You can use $.active along with waitFor.js script which returns the no of active connection to a server and we need to wait for it to be 0 for all requests to be complete.

More info: jQuery.active function

like image 1
Naga Kiran Avatar answered Nov 14 '22 02:11

Naga Kiran