Comment obtenir le même document que l’utilisateur (nous l’appellerons le DOM - Document Object Model) mais côté serveur ? Il faut un outil permettant de charger une page web et d’exécuter les scripts qui y sont associés. Cet outil existe, on l’appelle un navigateur. La grande différence réside dans les moyens d’interagir avec le navigateur. Il est question de faire parler des programmes entre eux et vous vous doutez qu’une interface utilisateur n’est pas le moyen le plus simple pour un programme de donner des ordres à un navigateur. Nous avons donc décidé de parler à notre navigateur en http et d’en faire un serveur web.

Nos premiers essais ont consisté à implémenter un serveur HTTP dans une application XUL (le “squelette” des applications Mozilla). Les résultats n’étant pas convaincants, nous avons alors écrit une application Qt utilisant Webkit, fonctionnant assez bien mais s’avérant assez complexe à déployer. Finalement, l’écriture d’une extension Firefox 4 en utilisant le Add-On SDK (Jetpack) s’est avérée être la bonne solution. Inutile de préciser que nous avons besoin d’un navigateur qui soit très performant et stable. Sur ce point, Firefox 4 ne déçoit pas du tout et dépasse même toutes nos attentes. Ainsi est né Mephisto.

Comment tout ceci fonctionne ? C’est très simple. Une fois l’extension installée, votre navigateur va écouter en local sur le port 8000 (configuration par défaut). Vous pouvez alors lui demander une page, par exemple, pour Temesis : http://localhost:8000/?url=http://www.temesis.com/. La réponse sera un contenu texte contenant le DOM de la page (et non sa source). Si vous le faites dans le même navigateur vous verrez un onglet s’ouvrir tout seul et se refermer, c’est amusant.

Utiliser un navigateur nous a permis d’ajouter d’autres fonctionnalités. Par exemple, nous pouvons implémenter un équivalent du moniteur réseau de Firebug. Ainsi la requête http://localhost:8000/dump?url=http://www.temesis.com/ enverra une réponse au format JSON contenant le DOM ainsi qu’une liste de toutes les ressources chargées avec la page. Cette fonctionnalité permet également d’appliquer des scripts externes sur la page pour la modifier et/ou ajouter d’autres informations aux résultats envoyés. Par exemple, nous pouvons, en plus, obtenir la liste des liens et des images dans le document. Par ailleurs, une fonctionnalité de capture d’écran existe mais n’est pas encore tout à fait stable.

Nous avons réalisé Mephisto pour nous permettre d’implémenter une nouvelle fonctionnalité sur Opquast Reporting et nous ne doutons pas que nous allons pouvoir généraliser son usage pour nos outils existants et pour proposer quelques nouveautés très intéressantes.

Temesis a une politique de contribution ouverte déjà reconnue, que ce soit au travers des Bonnes Pratiques Opquast, sous licence Creative Commons, ou de nombreuses contributions actives à des projets tels que Wikipedia, Dotclear ou SPIP. Ainsi, nous avons décidé de libérer le code de Mephisto pour vous permettre de l’utiliser comme bon vous semble et d’y contribuer. C'est notre façon de fêter le lancement de Firefox 4 :)

Le code de l’extension et un début de documentation est disponible sur GitHub. Vous pouvez télécharger directement l’extension ou l’utiliser avec le Add-On SDK de Mozilla.