Récupération du code source d'une page web avec netsurf

Introduction

Accéder au code source d'une page Web, à peu près, tout le monde sait le faire. Il suffit en effet de cliquer sur voir le source dans son navigateur préféré et on peut alors l'enregister dans un fichier si c'est nécessaire pour l'usage souhaité. Faire la même opération par programme est plus difficile et cette page se propose d'en exposer une solution.

Apercu du problème

Il existe 2 types de pages: les statiques comme celle que vous êtes en train de lire et les dynamiques qui sont composées et mise à jour dans la mémoire de votre machine par javascript avant dêtre affichées sur votre écran.

Pour récupérer les pages statiques, on peut utiliser wget ou curl qui fonctionnent très bien.

Pour récupérer les pages dynamiques, il faut utliser un navigateur qui charge les éléments de la page et les fragments de code javascript qui sont exécutés pour compléter la page. La page étant dans la mémoire du navigateur, il est possible de l'enregister dans un fichier. C'est ce qu'un humain fait tout les jours, sans problème, puisqu'il a des doigts pour cliquer.

Maintenant il s'agit de le faire par programme. Il existe, en effet, un programme xdotool qui permet de créer des évènements X11 et de les envoyer à l'application et simuler ainsi les clicks. La séquence d'utilisation est à peu près la suivante:

Comme on peut le voir, c'est acrobatique et comme les choses ne se font pas toujours à la même vitesse les temporisations sont un peu critiques et le résultat n'est pas toujours correct.

Une solution avec netsurf

Netsurf est un petit navigateur rapide. Il était utilisé avec la méthode précédente et il fait correctement le travail de charger et assembler les pages en exécutant le code javascript. Puis il attend que l'on intervienne. Alors pourquoi pas ajouter quelques lignes de code pour détecter la fin du chargement et, à ce moment là, écrire dans un fichier le code source html de la page et puis quitter le programme. C'est ce que permet de faire le patch proposé.

Après quelques essais, il semble que l'ouverture d'une fenêtre sur l'écran n'est pas nécessaire. L'application du patch la supprime donc dans le cas de sauvegarde du source.

Pour appliquer le patch, il faut télécharger les sources de la version en cours et installer les prérequis voir le fichier docs/quick-start.md après téléchargement des sources. Pour les modules libcss, libdom, libutf8proc, il faut aussi partir de la version git plutôt que celle installée de votre distribution;

$ git clone git://git.netsurf-browser.org/netsurf.git
$ cd netsurf
$ patch -p1  < ../netsurf.patch
$ make

Après compilation, on dispose d'un binaire nsgtk à copier dans /usr/bin. Noter que ce patch s'applique uniquement à la version gtk de netsurf.

L'utilisation normale de netsurf:

$ nsgtk
 ou
$ nsgtk <url de la page>

$ nsgtk rvq.fr 

L'utilisation spéciale avec le patch, le fichier de sortie pouvant être stdout. La temporisation est par default 300 ms et peut être modifiée par un troisième paramètre optionnel:

$ nsgtk <url de la page> <nom du fichier de sortie> [tempo_ms]

$ nsgtk rvq.fr /tmp/rvq.html
netsurf: 0 0 0 0 1

References

  1. NetSurf Home Page.

Download