Firefox en console c’est mieux que lynx !

C’est quoi le plan;

Aujourd’hui, comment instrumenter un browser pour lui faire cracher un rendu de page web sur une debian le tout en console.

On va utiliser un truc nommé selenium qui est vieux comme le monde mais dont personne n’avait pensé à m’en parler avant. Et ce truc permettra de piloter un firefox. Pour se passer d’installation de debian graphique et pouvoir tout de meme le piloter on va utiliser xvfb qui est un serveur X “frame buffer”.. Bref un faux serveur X qui fait le rendu en ram sans l’afficher.

C’est partis

Primo on va installer quelque paquets nécessaires, et aussi firefox depuis un repository de linuxmint (ces psychorigides de debianistes n’aiment pas le licencing de Ffox ).

Première étape, installer la clef du repo  (ayez confiiiiannnce, nooon ne le faite pas !).

sudo gpg --keyserver pgp.mit.edu --recv-keys 3EE67F3D0FF405B2
sudo gpg --export 3EE67F3D0FF405B2 > 3EE67F3D0FF405B2.gpg
sudo apt-key add ./3EE67F3D0FF405B2.gpg
sudo rm ./3EE67F3D0FF405B2.gpg

Ensuite on va ajouter ce repo dans notre liste de source de paquets (/etc/apt/source.list)

deb http://packages.linuxmint.com debian import

Et on est pret pour installer tout ce qu’il nous faut.

sudo apt-get update
sudo apt-get install firefox xvfb libasound2 libdbus-glib-1-2 libgtk2.0-0

Et bien sur selenium qui va bien depuis PIP (on est sous debian hein…)

pip install -U selenium

Voila tout est pret.

Formidable selenium

C’est partis, on va piloter notre browser via python (Selenium supporte d’autre languages mais sérieux quoi, python ca me va) Voici le petit script qui va permettre de capturer un site web, il est dispo dans mon git à broll httpgrab.py.

#!/usr/bin/env python
# coding=utf-8   
import  sys,os
from selenium import webdriver

# Functions
def getparam(count):
  if len(sys.argv) != count+1:
    print 'My command'
    print 'To Use: '+ sys.argv[0]+  ' my params'
    sys.exit(1)
  else:
    return sys.argv[1],sys.argv[2]

# Main Code #####
def main():
  page, name = getparam(2)
  print ("get %s to %s" % (page,name))
  print ("Start FFox")
  seleniumobj = webdriver.Firefox()
  print ("Get Page")
  seleniumobj.get(page)
  print ("Save Page")
  seleniumobj.save_screenshot(name)
  seleniumobj.quit()


if __name__ == '__main__':
  main()

On le voit, c’est 3 lignes de code (firefox(), get(), save_screenshot()). Et quand on le lance c’est via xvfb-run qui va démarre le faux X pour notre firefox.

$ xvfb-run ./get_pageimg.py http://www.perdu.com perdu.png
get http://www.perdu.com to perdu.png
Start FFox
Get Page
Save Page

Et Bingo !

perdu

 

This entry was posted in Coding and tagged . Bookmark the permalink.

1 Response to Firefox en console c’est mieux que lynx !

  1. John says:

    Phantomjs fait aussi du bon boulot, avec ce script de surcroit : https://github.com/maaaaz/webscreenshot

Leave a Reply to John Cancel reply

Your email address will not be published. Required fields are marked *

AlphaOmega Captcha Classica  –  Enter Security Code