Main menu:

Site search

Categories

août 2014
L Ma Me J V S D
« mai    
 123
45678910
11121314151617
18192021222324
25262728293031

Archive

Un navigateur en quelques lignes de Python

Avec un langage comme Python et Webkit, il est extrêmement facile de créer une application qui affiche un site internet. Jugez-en vous-même.
Le programme ci-dessous, en 9 lignes de code, affiche dans une une fenêtre une page web dont l’adresse est spécifiée dans le programme:

#!/usr/bin/env python  

import gtk  
import webkit  
import gobject  

gobject.threads_init()  
window = gtk.Window()
window.set_default_size(800, 600)
window.connect("destroy"lambda a: gtk.main_quit()) 
browser = webkit.WebView()  
browser.open("http://linux.leunen.com")  
window.add(browser)  
window.show_all()  
gtk.main()  

On peut améliorer légèrement le programme pour qu’il ressemble un peu plus à un navigateur en rajoutant dans le haut de la fenêtre une barre d’adresse dans laquelle une URL peut être tapée. Lorsque vous appuierez sur la touche Enter, la page sera affichée dans la zone inférieure de la fenêtre. N’oubliez pas de mettre le http:// devant l’adresse du site que vous voulez visualiser:

#!/usr/bin/env python  
# -*- coding: utf-8 -*-

import gtk  
import gobject  
import webkit

# Fonction appelée lorsqu'on appuie sur enter dans la barre d'adresse
def browse(widget):
  # On affiche l'URL contenue dans la barre d'adresse
  browser.open(widget.get_text()) 

gobject.threads_init()

# Création de la fenêtre
window = gtk.Window()
# On définit sa taille par défaut
window.set_default_size(800, 600)
# Exécute gtk.main_quit() quand on clique sur la croix
window.connect("destroy"lambda a: gtk.main_quit()) 

# La barre d'adresse et la zone où s'affiche la page internet
# sont placées dans une boîte verticale
vbox = gtk.VBox(False,0)
window.add(vbox)
add = gtk.Entry()
# la fonction browse est appelée quand on tape sur Enter
add.connect("activate", browse)
vbox.pack_start(add, False, True, 0)

# Initialisation de l'objet webkit
browser = webkit.WebView()
vbox.pack_start(browser)

window.show_all()  
gtk.main()  

Les codes sources de ces deux exemples peuvent être téléchargés ici:
exemple 1
exemple 2

Et voici une capture d’écran qui vous montre à quoi ça ressemble:

browse2.py

Comments

Comment from Steph
Time: 24 août 2009, 21 h 55 min

Merci pour cet exemple !
As-tu une idée pour récupérer le code html de la page affichée par webkit ?

Comment from admin
Time: 24 août 2009, 22 h 18 min

Je ne suis pas du tout un spécialiste de webkit mais je crois qu’il faut passer par un DOM inspector ou un web inspector, quelque chose comme ça. Autrement dit, c’est moins simple que le bout de code donné ci-dessus qui était juste indicatif.

Comment from dindoun
Time: 8 novembre 2009, 16 h 00 min

salut
incroyable
meme le flash player marche immédiatement!

Comment from Charlie
Time: 1 octobre 2010, 17 h 41 min

Bonjour !

Auriez-vous un lien pour une doc complète des possibilités de python-webkit ? Je cherche depuis un moment, en vain… Je cherche en particulier ce qu’on peut faire avec webkit.WebView(), notamment si on peut faire réagir un programme python en fonction des liens cliqué dans la page, etc.

En tout cas merci pour ce petit bout de code !

Charlie

Comment from admin
Time: 1 octobre 2010, 21 h 02 min

Non, je serais aussi content de trouver une doc complète pour python.

Comment from John
Time: 14 avril 2011, 9 h 11 min

Oui, merci pour ce bout de code.
Cependant, chez moi certains sites (dont celui-ci) font planter mes effets graphiques (compiz) qui se mettent automatiquement sur « aucun ».

Je ne sais pas d’où ça peut venir. J’attends une réaction.

Comment from Daft33Punk
Time: 5 décembre 2011, 2 h 59 min

Bonjour, ou peut on trouver la librairie « python-WebKit » pour Windows.
Mercis

Pingback from Le bordel de l’info #8 | IdleBlog
Time: 24 février 2012, 9 h 40 min

[...] sur 17 141 packages et comporte 31 langages de programmations … beau bébé tout de même !Le python m'attire de plus en plus, qu'il s'agisse de sa rapidité extrême, de sa facilité de [...]