tuto – ruby – phantomjs

Phantom JS est une brique très utile pour utiliser watir en mode headless, c’est à dire pour utiliser watir sans lancer de browser à l’écran. Toutes les tâches se font en background.

 

Quelques lignes rapides pour installer proprement phantomjs (moi j’avais eu un problème d’exécutable non installé, du coup j’ai dû pas mal fouiller) :

sudo apt-get update
sudo apt-get install build-essential chrpath git-core libssl-dev libfontconfig1-dev
sudo git clone git://github.com/ariya/phantomjs.git
cd phantomjs/
sudo git checkout 1.9
sudo ./build.sh

Description ci-dessus tiré du site suivant : http://phantomjs.org/build.html. Attention, l’installation est assez longue (de l’ordre de 30 à 40 min chez moi).

 

Une fois l’installation terminée, vous installez le gem correspondant :

sudo rvm all do gem install phantomjs

Si d’aventure vous vous retrouviez avec un message d’erreur lors de l’exécution :

 Unable to find phantomjs executable. (Selenium::WebDriver::Error::WebDriverError)

il faudra faire un lien symbolique depuis le répertoire de votre exécutable vers le répertoire courant des exécutables :

sudo ln -s /home/mon_chemin/phantomjs/bin/phantomjs /usr/local/bin/

 

Tout est prêt, allons jeter un oeil du coté de l’irb (le même code dans un fichier marchera aussi biensur). Lancez la commande irb depuis votre terminal :

1.9.2p290 :001 > require 'nokogiri'
 => true 
1.9.2p290 :001 > require 'watir-webdriver'
 => true 
1.9.2p290 :001 > b = Watir::Browser.new(:phantomjs)
 => #<Watir::Browser:0x1053418301a07c0e url="about:blank" title="">
1.9.2p290 :001 > b.goto url

 

 

Et voilà, pour bien comprendre le petit plus de phantom js, lancez le code suivant dans l’irb :

1.9.2p290 :001 > b = Watir::Browser.new(:firefox)

 

On voit bien que dans un cas on peut naviguer avec watir sans ouvrir de navigateur, et dans l’autre on ouvre bel et bien un navigateur.
Une autre utilité de phantom js est qu’il charge les pages après exécution des scripts js de la page. C’est à dire que si un champ est conditionné
par l’exécution d’un javascript, qui se déclenche lui même lorsqu’un browser ouvre la page, dans le cas de phantom, on aura le contenu de la page avec le champ bien alimenté, contrairement à mechanize qui ne fait pas de js, et qui se contente de prendre le html pur, et on aura donc le fameux champ non alimenté.