Navegador simple con Python + Webkit/GTK
Warning: Undefined variable $comments in /var/www/html/wp-content/themes/inove/single.php on line 18
Dejar un comentario Ir a comentarios
Hoy me encontré con otro un hilo en la lista de PyAr que me deja un link más que interesante: ¡Existe un binding para usar Webkit sobre GTK desde Python, y lo mejor de todo es que ya está incluido en los repositorios de Ubuntu 9.10!
Webkit es un motor de renderizado («dibujado») de páginas web, que es utilizado en el corazón en cada vez más navegadores, como Chrome, Safari, Konqueror, etc. Es super completo y veloz; y permite ejecutarse en muchísimas plataformas y sistemas diferentes. Si bien existen otros métodos para embeber un navegador en una aplicación PyGTK, como por ejemplo gtkmozembed (que embebe el motor de Firefox), éste no es muy poderoso, o por lo menos no deja meterle mucha «mano» para personalizarlo, y uno termina teniendo relativamente muy poco «poder». En cambio con Webkit/GTK se pueden hacer muchas más cosas, tan sólo hace falta ver la documentación y un ejemplo (links al final, claro). 🙂
No podía dejar de probarlo. Entonces me puse manos a la obra, y salió esto, tratando de imitar lo que se posteó en la lista:
#!/usr/bin/env python # -*- coding: utf-8 -*- """ SimpleBrowser - Navegador muy muy simple de internet, sólo de ejemplo, que utiliza la biblioteca Webkit GTK desde Python (PyWebkitGTK). Marcelo Fidel Fernández - http://www.marcelofernandez.info Licencia: BSD. Disponible en: http://www.freebsd.org/copyright/license.html """ import sys import gtk import webkit DEFAULT_URL = 'http://www.python.org' class SimpleBrowser: def __init__(self): self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.set_position(gtk.WIN_POS_CENTER_ALWAYS) self.window.connect('delete_event', self.close_application) self.window.set_default_size(800, 600) vbox = gtk.VBox(spacing=5) vbox.set_border_width(5) self.txt_url = gtk.Entry() self.txt_url.connect('activate', self._txt_url_activate) self.scrolled_window = gtk.ScrolledWindow() self.webview = webkit.WebView() self.scrolled_window.add(self.webview) vbox.pack_start(self.txt_url, fill=False, expand=False) vbox.pack_start(self.scrolled_window, fill=True, expand=True) self.window.add(vbox) def _txt_url_activate(self, entry): self._load(entry.get_text()) def _load(self, url): self.webview.open(url) def open(self, url): self.txt_url.set_text(url) self.window.set_title('SimpleBrowser - %s' % url) self._load(url) def show(self): self.window.show_all() def close_application(self, widget, event, data=None): gtk.main_quit() if __name__ == '__main__': if len(sys.argv) > 1: url = sys.argv[1] else: url = DEFAULT_URL # PyWebkitGTK necesita habilitar el soporte de los hilos en PyGTK gtk.gdk.threads_init() browser = SimpleBrowser() browser.open(url) browser.show() gtk.main() |
¡Y Listo!
Todo lo que se necesita en Ubuntu 9.10 para poder correr esto es instalar el paquete «python-webkit»; sin embargo, esta versión es la 1.1.5, mientras que PyWebkitGTK va por la 1.1.7 y Webkit/GTK va por la 1.1.15, así que todavía hay lugar para mejoras.
Aquí dejo algunos links:
- PyWebkitGTK se llama el proyecto de llevar Webkit/GTK (escrito naturalmente en C) a Python.
- Acá hay un ejemplo muchísimo más completo de un navegador con múltiples pestañas y todo.
- Lamentablemente, la documentación de la biblioteca en Python no existe aún (es un ticket del proyecto), así que por ahora habrá que conformarse con la documentación de Webkit/GTK; sin embargo, yo lo encuentro bastante legible, ya que enseguida uno se adapta a «traducir» cómo se llamaría un método en C a uno en Python.
Espero que les sirva. Me divertí mucho haciéndolo. 🙂
Saludos
Plas, plas. Andaba tiempo buscando algo similar para realizar alguna integración de servicios web dentro de una aplicación python. Muchas gracias por compartirlo.
Hola a todos. quisiera saber quien me puede indicar una buena pagina donde me pueda informar sobre webkit necesito hacer un navegador pero como no manejo mucho estos terminos necesito una guia, les agradeceria mucho
Hola Rachell, ¿los links que dejé en el artículo no son suficientes?
Acá tenés un video estilo «Guía de Aprendizaje»:
http://www.tuxradar.com/content/python-pygtk-webkit-20-minutes
Cualquier otra duda/consulta te esperamos en la lista de correo del grupo de Programadores Python de Argentina, PyAr:
http://www.python.org.ar
Te esperamos, saludos!
Una pregunta, el navegador no funciona con algunas webs, sobre todo las de música en vivo tipo groveshark o fulltono, no se si spotify, esto es por algo?
Hola, hay que ver el soporte de plugins que tenés en tu sistema, si no me equivoco, el WebkitGTK carga los mismos plugins del Firefox de tu sistema. Fijate si esas webs las podés ver con el Firefox o no y ahí vas descartando problemas.
Saludos
Hola, tengo una intriga, me interesaría crear una app en c# (para usar el api de evernote pues ellos no permiten javascript) y que usara html5 con animaciones en jquery, mi primera idea era que el programa corriera un servidor, similar a hacer una pagina web y la gui simplemente se conectara a ese servidor y renderizara la pagina, no estoy seguro pero parece una mala idea (si no muchos programadores estarían haciendo eso y hasta ahora no conozco ninguno 😀 …) sabes si hay alguna pagina o algun recurso para entender bien como conectar el html con el javascript con el otro lenguaje que use??…gracias….
Hola Angel, no entiendo bien lo que querés hacer y conozco bastante poco (por no decir nada) de C#, pero por lo que entiendo vos querés hacer una aplicación híbrida, donde la aplicación muestra una vista web que se conecta a un server web local (o remoto). Te sugiero que busques en Google (o el MSDN) para más info.
Saludos
alguien sabe como instalar pywebkitgtk-1.1.8 en windows?
Con Pyside (el binding python de Qt) sale mas pequeño, solo 9 lineas:
import sys
from PySide.QtCore import *
from PySide.QtGui import *
from PySide.QtWebKit import *
app = QApplication(sys.argv)
web = QWebView()
web.load(QUrl(«http://google.com»))
web.show()
sys.exit(app.exec_())
Hola @satoshi ,
Si bien no discuto que QT tenga una integración un poco más homogénea con Webkit, el ejemplo que describí tiene más funcionalidad que el que comentás con PySide. Por ejemplo, el cuadro de texto para ingresar nuevas URLs, el cambio de título de la ventana, etc.
Por otra parte, a partir de Phoenix, la versión en desarrollo de wxPython (que me dicen que está bastante avanzada), ya se implementa un objeto html2 en todas las plataformas, con el objetivo de solventar esta falencia:
http://wxpython.org/Phoenix/docs/html/html2.1classindex.html
Lo bueno (o malo, según cómo se quiera ver) es que en Windows usa Trident (el motor de IE), en Linux usa WebkitGTK (el de este ejemplo) y en Mac usa Webkit (el de Safari).
Saludos