Un navegador en 42 líneas de código
LA MAGIA…
Todo comenzó en Ubuntuforums con la típica discusión acerca de navegadores livianos. Aparecieron por supuesto, lo conocidos navegadores minimalistas como Dillo, Uzbl y toda la amplia gama de proyectos alojados en Sourceforge. Pero sin duda lo más sorprendente fue la contribución del usuario juancarlospaco, que consistió en un pequeño script en Python que permite navegar cómodamente en cualquier sitio web, utilizando menos de 2 Kb de espacio en disco en 42 líneas de código. Aquí tienen el código publicado (con una modificación en la línea 11, para agrandar el tamaño inicial de la ventana del navegador):
Bueno, copien el pedazo de código, péguenlo en su editor de texto favorito, guárdenlo (yo le asigné el nombre de browser.py) y asígnenle permisos de ejecución. Luego en un emulador de terminal escriban ./browser.py y… ¡magia! Tendrán un navegador completamante compatible con los acutuales estándares web. Otra forma de utilizarlo es entregarle como parámetro la url que se desa visitar, por ejemplo: ./browser.py http://www.gmail.com y magia otra vez (muy importante no olvidar el http://).
EL TRUCO…
Seguramente los más avezados mirando el código, ya habrán pillado el truco detrás de la magia, bueno, el truco de este script, consiste en utilizar las librerías gtk y libwebkit-gtk, algo así como un Midori, pero muy simplificado. Por lo tanto, no es un navegador en sí, es tan sólo un simple script que delega todo el trabajo de dibujado de la ventana a las librerías gtk y el trabajo de renderizado de páginas a la librería libwebkit-gtk, es por ésto que en general las paginas cargan bien, y al estar basado en Webkit ofrece una muy buena compatibilidad con las tecnologías web actuales y las que están por venir.
cool!! utilicen algún plugin para desplegar código, saludos.-
Es engañoso eso de decir pocas líneas e incluir miles de líneas en librerías prehechas
es como decir, navegador en una sola linea ( pseudo lenguaje )
exec firefox
lo liviano en verdad se ve a nivel del código de máquina generado y los recursos consumidos
Ta weno pa ver como se usan las librerias y cosas así. pero me tira error en la linea 7:
alvaro@debian:~$ ./*py
File “./navegador.py”, line 7
def __init__(self):
^
IndentationError: expected an indented block
Python es sensible a la identacion y …. el ejemplo se comió toda la identación.
ClaudioMet where are you?
@alvaro me sale lo mismo
#!/usr/bin/env python
import sys
import gtk
import webkit
DEFAULT_URL = ‘http://www.google.com‘ # Change this as you Wish
class SimpleBrowser: # needs GTK, Python, Webkit-GTK
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(350, 20)
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.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(‘%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
gtk.gdk.threads_init()
browser = SimpleBrowser()
browser.open(url)
browser.show()
gtk.main()
desde el primer def son 3 espacios, quedando el def en el 4to espacio. los siguientes “self. son 7 espacios, quedando el self en el 8vo.
y repitan los def en cuarto espacio y los self en el 8vo. el primer IF qued aal comienzo de la linea y el segundo if en el 4to espacio el url en el 8vo el else a la isma altura del segundo IF y el siguiente URL a la altura del primero y lo que siga a la altura del “else”
espero ser claro (?)
saludos.
#!/usr/bin/env python
import sys
import gtk
import webkit
DEFAULT_URL = ‘http://www.google.com‘ # Change this as you Wish
class SimpleBrowser: # needs GTK, Python, Webkit-GTK
123def __init__(self):
1234567self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
1234567 self.window.set_position(gtk.WIN_POS_CENTER_ALWAYS)
1234567self.window.connect(‘delete_event’, self.close_application)
1234567self.window.set_default_size(350, 20)
1234567vbox = gtk.VBox(spacing=5)
1234567vbox.set_border_width(5)
1234567self.txt_url = gtk.Entry()
1234567self.txt_url.connect(‘activate’, self._txt_url_activate)
1234567self.scrolled_window = gtk.ScrolledWindow()
1234567self.webview = webkit.WebView()
1234567self.scrolled_window.add(self.webview)
1234567vbox.pack_start(self.scrolled_window, fill=True, expand=True)
1234567self.window.add(vbox)
123def _txt_url_activate(self, entry):
1234567self._load(entry.get_text())
123def _load(self, url):
1234567self.webview.open(url)
1234567def open(self, url):
1234567self.txt_url.set_text(url)
1234567self.window.set_title(‘%s’ % url)
1234567self._load(url)
123def show(self):
1234567self.window.show_all()
123def close_application(self, widget, event, data=None):
1234567gtk.main_quit()
if __name__ == ‘__main__’:
123if len(sys.argv) > 1:
1234567url = sys.argv[1]
123else:
1234567url = DEFAULT_URL
1234567gtk.gdk.threads_init()
1234567browser = SimpleBrowser()
1234567browser.open(url)
1234567browser.show()
1234567gtk.main()
Reemplacen los numeros por espacios..
saludos.
Listo, pegado el código en pastebin.
Sorry por las molestias
Tienes a los pobres cabros indentando jaja
Yo siempre tengo mala suerte con estos scripts. Ahora me está pidiendo la importación de webkit y ya he instalador todo lo que tiene que ver con eso (*webkit*) en debian lenny.
#!/usr/bin/env python
import sys
import gtk
import webkit
DEFAULT_URL = ‘http://www.google.com‘ # Change this as you Wish
class SimpleBrowser: # needs GTK, Python, Webkit-GTK
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(350, 20)
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.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(‘%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
gtk.gdk.threads_init()
browser = SimpleBrowser()
browser.open(url)
browser.show()
gtk.main()
Aquí en 10 líneas, con Qt http://pastebin.com/HnyuzFUf
Franco me funciona bien el scropt, pero el unico detalle es que no muestra la barra para poner la direccion web.
@Krash pásale la url como argumento, p ej. :
./browser.py http://www.arealinux.cl
no olvides el http://