Navigation

    La Cabane Libre

    • Register
    • Login
    • Search
    • Catégories
    • Recent
    • Mots-clés
    • Ciné Libre

    Naviguer sans tête dans un coquillage !

    Articles de Logiciels
    1
    1
    121
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Léopard des Mers
      Léopard des Mers Prédateur last edited by

      Sommaire

      • Récupérer une page web
        • curl
        • Wget
        • Lynx
        • Chromium
        • Firefox
      • Faire une copie d’écran
        • Chromium
        • Firefox
        • Exploitation des copies d’écran
      • Conclusion

      Naviguer headless consiste à surfer sur la toile d’araignée sans gui. Dans ce journal, on ne s’intéressera pas à des outils tels que Selenium WebDriver (https://www.selenium.dev/) qui permet à partir de différents langages d’interagir avec les navigateurs les plus courants, ou Weboob (WEB Outside Of Browsers, http://weboob.org/) qui permet de se connecter à différents sites depuis Python, mais plutôt à quelques outils accessibles depuis le shell : curl, Wget, Lynx, Chromium et Firefox. On abordera en particulier le problème de la récupération d’informations accessibles uniquement quand on est identifié sur un site à l’aide d’un biscuit.

      Les deux grandes parties de ce journal concerneront la récupération en ligne de commandes d’une page web soit sous sa forme HTML ou textuelle, ce qui permettra en particulier d’y chercher des informations avec grep, soit sous forme d’une copie d’écran.

      Il s’agit juste de faire le bilan de quelques compétences acquises durant le Grand Confinement, sans viser l’exhaustivité. Je compte bien sûr sur vous pour corriger et compléter le sujet dans vos commentaires.

      Récupérer une page web

      curl

      curl va récupérer la page indiquée et l’envoyer sur la sortie standard :

      $ curl https://linuxfr.org/tableau-de-bord <html><body>You are being <a href="https://linuxfr.org/compte/connexion">redirected</a>.</body></html> 
      

      En n’étant pas connecté à son compte, le résultat n’est pas intéressant. Comment récupérer votre tableau de bord ? Les navigateurs tels que Firefox et Chromium proposent des outils de développement qui vont nous aider énormément. Connectez-vous et affichez votre tableau de bord LinuxFr.org. Dans Firefox, allez dans le menu Développement web > Réseau, puis rechargez la page. Dans la liste des éléments téléchargés, revenez à la racine du site et avec le bouton droit de la souris, allez dans Copier > Copier comme cURL. Vous obtenez ainsi la commande curl permettant de récupérer la page telle qu’elle apparaît dans votre navigateur (j’ai remplacé certaines données par blablabla) :

      $ curl https://linuxfr.org/tableau-de-bord -H 'User-Agent: Mozilla/5.0 blablabla' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3' --compressed -H 'Referer: https://linuxfr.org/' -H 'DNT: 1' -H 'Connection: keep-alive' -H 'Cookie: remember_account_token=blablabla; linuxfr.org_session=blablabla' -H 'Upgrade-Insecure-Requests: 1' -H 'Cache-Control: max-age=0' -H 'TE: Trailers' -H 'If-None-Match: W/"blablabla"' 
      

      Ca fait du monde, mais on peut ne conserver que le cookie d’identification :

      $ curl https://linuxfr.org/tableau-de-bord -H 'Cookie: remember_account_token=blablabla' 
      

      Si je veux savoir si j’ai reçu une réponse à un commentaire, puisque curl envoie la page sur la sortie standard, il suffit d’ajouter un grep :

      $ curl https://linuxfr.org/tableau-de-bord -H 'Cookie: remember_account_token=blablabla' | grep ''Nouveaux commentaires !' 
      

      Dans un script, il peut être intéressant de faire taire curl avec l’option -s (silent).

      Références :

      • https://curl.haxx.se/
      • https://curl.haxx.se/book.html
      • https://stackoverflow.com/questions/12399087/curl-to-access-a-page-that-requires-a-login-from-a-different-page

      Wget

      On peut également utiliser Wget qui va quant à lui enregistrer la page web dans un fichier :

      $ wget https://linuxfr.org/tableau-de-bord 
      

      Vous constaterez en passant que Wget ne télécharge pas une page de redirection comme l’a fait curl. Mais pour récupérer du contenu intéressant, il faut comme avec curl utiliser notre cookie :

      $ wget --header 'Cookie: remember_account_token=blablabla' https://linuxfr.org/tableau-de-bord 
      

      Pour faire taire Wget dans un script, on utilisera l’option -q (quiet).

      Référence :

      • https://www.gnu.org/software/wget/

      Lynx

      Lynx est intéressant avec son option -dump qui permet d’envoyer le texte de la page (et non pas le code HTML) sur la sortie standard. Mais il faut d’abord activer les cookies permanents, en se créant par exemple un fichier de configuration perso :

      $ cp /etc/lynx/lynx.cfg mon_lynx.cfg 
      

      Cherchez dans ce fichier PERSISTENT_COOKIES:FALSE et remplacez par PERSISTENT_COOKIES:TRUE (ligne 1428 dans mon cas). Ensuite connectez-vous sur votre compte avec Lynx :

      $ lynx -cfg=mon_lynx.cfg -accept_all_cookies https://linuxfr.org/tableau-de-bord 
      

      Vous pouvez maintenant déverser le texte de la page sur la sortie standard :

      $ lynx -dump -cfg=mon_lynx.cfg -accept_all_cookies https://linuxfr.org/tableau-de-bord 
      

      Références :

      • http://lynx.browser.org/
      • http://linuxfromscratch.org/blfs/view/svn/basicnet/lynx.html

      Chromium

      Sous Ubuntu, Chromium doit être installé par snap :

      $ sudo snap install chromium 
      

      Pour connaître le chemin d’accès de votre profil, lancez Chromium et tapez dans la barre de navigation : chrome://version/

      Connectez-vous en mode graphique au site voulu et identifiez-vous :

      $ chromium --user-data-dir='/home/monlogin/snap/chromium/blabla' https://linuxfr.org/tableau-de-bord 
      

      Vous pouvez maintenant envoyer la page HTML sur la sortie standard :

      $ chromium --user-data-dir='/home/monlogin/snap/chromium/blabla' --headless --dump-dom https://linuxfr.org/tableau-de-bord 
      

      Chromium m’a été bien utile avant que je n’arrive à utiliser les autres outils, mais je lui ai trouvé deux défauts. Premièrement, l’installation dans Ubuntu via snap fait que Chromium ne peut pas écrire dans n’importe quel répertoire de votre compte, à cause des mécanismes d’isolation de snap. Deuxièmement, j’ai été obligé de recréer de nouveaux profils régulièrement : au début tout va bien, puis des avertissements comme quoi Chromium n’arrive pas à écrire dans tel ou tel fichier s’accumulent.

      Référence :

      • Options de Chromium en ligne de commandes : https://peter.sh/experiments/chromium-command-line-switches/

      Firefox

      Avec Firefox, prise de tête avec --headless, je n’ai jamais réussi à récupérer une page HTML. Et vous ?

      Référence :

      • https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Headless_mode#Using_headless_mode

      Faire une copie d’écran

      Chromium

      L’option --screenshot permet d’effectuer une copie d’écran d’une page web :

      chromium --user-data-dir='/home/monlogin/snap/chromium/blabla' --headless --screenshot=linuxfr.png https://linuxfr.org/ 
      

      On peut indiquer la résolution de cet écran virtuel, par exemple --window-size=1280,1024, et on peut cacher les ascenseurs avec --hide-scrollbars.

      Firefox

      Ca marche en créant au préalable un nouveau profil dédié, que j’ai nommé “screenshots”, en lançant :

      $ firefox --ProfileManager 
      

      Ce qui est intéressant avec Firefox, c’est qu’on n’obtient pas une copie de ce qui apparaîtrait à l’écran, mais une copie de la page sur toute sa longueur ! L’exemple ci-dessous me donne ainsi une image de 1 366 x 8 142 pixels :

      $ firefox --screenshot -P screenshots https://linuxfr.org/ 
      

      Avec Firefox, l’option --screenshot implique --headless.

      Exploitation des copies d’écran

      On pourrait par exemple détecter la fin du Grand Confinement en surveillant le logo de LinuxFr.org. On découpe la zone de l’image qui nous intéresse avec mogrify (ImageMagick) et on calcule sa somme MD5 :

      $ mogrify -crop 193x201+90+48 linuxfr.png $ md5sum linuxfr.png | cut -f 1 -d " " 09372763060163c12ea2e204727253b0 
      

      Il suffit alors de comparer cette somme avec celle d’une copie d’écran de référence pour détecter le changement de logo.

      Référence :

      • https://www.imagemagick.org/script/mogrify.php

      Conclusion

      Pour ma part, j’ai jeté mon dévolu sur curl pour son insoutenable légèreté et son affinité avec grep, et sur Firefox pour ce qui est de tirer sur l’écran. Je retiens également Lynx pour sa capacité à fournir le texte et non pas le code HTML de la page. Quant à vous, adorateurs du noyau finlandais, vénérables druides sans gui, vous arrive-t-il de naviguer sans tête dans un coquillage ? Quelles commandes et options gratinées mettez-vous dans vos marmites ?

      Télécharger ce contenu au format Epub

      Commentaires : voir le flux atom ouvrir dans le navigateur

      https://linuxfr.org/users/vmagnin/journaux/naviguer-sans-tete-dans-un-coquillage

      1 Reply Last reply Reply Quote 0
      • First post
        Last post

      Sauf mention contraire, le site est placé sous double licence Creative Commons BY-SA et GNU Free Documentation License propulsé par NodeBB