Hier, un PHP wannabee (berk), Romain cherchait à faire un screenshot d’une page web en « ligne de commande ».
Plusieurs solutions lui ont été proposées. Pour ma part, ma préférée est Selenium ! Sachant bien qu’il ne ferait jamais la chose en Ruby, j’ai donc décidé de regarder cela d’un peu plus près.
Tout d’abord, vous devez avoir Selenium RC installé et lancé.
C’est simple. Téléchargez le, rendez-vous dans le dossier selenium-server-1.0 et entrez
java -jar selenium-server.jar
Votre serveur Selenium est lancé sur le port 4444. Y’a plus qu’à l’utiliser !
Vous devez également avoir la librairie selenium-client installée.
sudo gem install selenium-client
Votre disque dur étant maintenant un peu moins vide, on peut s’attaquer au code en lui même ! ![]()
Je vais faire un screenshot de mon tout nouveau portfolio (encore en chantier).
On commence par la magie et on explique après.
require 'rubygems'
require 'selenium'
# We load Selenium
@selenium = Selenium::SeleniumDriver.new("localhost", 4444, "*firefox", "http://42.dmathieu.com/", 10000);
@selenium.start
@selenium.set_context("test_new")
# We go to the main page and take the screenshot
@selenium.open "/"
@selenium.capture_entire_page_screenshot(File.expand_path(File.dirname(__FILE__)) + 'screenshot.png', '');
# We unload Selenium
@selenium.stop
On commence par charger les librairies requises. Pas compliqué, on a besoin que de Selenium.
require 'rubygems' require 'selenium'
Puis on charge Selenium en lui renseignant l’URL que l’on désire visiter et le navigateur avec lequel on désire visiter celle-ci.
Et en définissant le contexte (ici, un firefox vierge).
@selenium = Selenium::SeleniumDriver.new("localhost", 4444, "*firefox", "http://42.dmathieu.com/", 10000);
@selenium.start
@selenium.set_context("test_new")
On charge la page, on prends le screenshot et on sauvegarde l’image créée
@selenium.open "/" @selenium.capture_entire_page_screenshot(File.expand_path(File.dirname(__FILE__)) + 'screenshot.png', '');
Et on oublie pas de libérer la mémoire.
@selenium.stop
Et zou, c’est super magique ! Notre beau screenshot (de la page entière, pas seulement de l’écran) est alors généré.

Vous noterez que le javascript est exécuté (tentez de désactiver le javascript de votre navigateur et regarder ce qu’il advient de mon email affiché sur la page).
Et que le rendu est effectivement le même que ce que l’on a dans le navigateur.
A quand un outil open source utilisant Selenium et générant des thumbnails ? :p




