jueves, 19 de abril de 2012

Crear un navegador web

En este tema voy a tratar sobre como crear un navegador web muy sencillo, apenas unas pocas lineas de código: no tiene barra de menús, ni barra de iconos, sino solo una barra de dirección, y si elegimos como página de inicio un motor de búsqueda tendremos también una barra de búsqueda. Para tener las otras opciones, muy simples (Atrás, Adelante, Detener, Recargar ) solo hay que hacer click con el botón derecho del ratón sobre cualquier zona de la ventana.

La información básica para escribir este tema se la debo al amigo Krel en http://foro.ubuntu-guia.com/  el cual saco la información desde: http://holamundopy.blogspot.com.es/2011/10/navegador-web-con-python.html  ; el autor del script es Daniel Fuentes B. al cual obviamente le doy las gracias; la página donde publicó el código del script es: http://pythonmania.wordpress.com/2010/02/18/pywebkit-navegador-web-en-python/

Preparativos para hacer funcionar el script :

- Es un script escrito con python, por lo que tendremos que tener instalados en nuestro sistema algunos paquetes: python-gtk2 , python-webkit , libwebkit-dev : instalamos: sudo apt-get install python-gtk2 python-webkit libwebkit-dev . O sino lo bajan desde su sitio

- Copiar el código (ver mas abajo)  en un archivo vacío abierto con gedit; guardar dicho archivo conservando las modificaciones, con un nombre que acabe en .py ( por ejemplo en /home/usuario/Scripts/navegador_web.py ), esto hará que el script sea reconocido como un script escrito con python.

- En propiedades del archivo-> abrir con: poner abrir con gedit para poderlo editar fácilmente.

- Asegurarse de que en propiedades de dicho archivo están activadas las opciones de ejecutar como un programa

- Añadir un nuevo elemento en el menú de aplicaciones, con el comando:  /home/usuario/Scripts/navegador_web.py

------------------------------------

Pequeñas modificaciones, sin saber python ( como yo no sé ):

Para editar algunas opciones del script hay que abrirlo con un editor de texto simple, como gedit, y:

- Modificar el nombre del título: en la línea:  self.window.set_title("Ejemplo pywebkitgtk - %s" % url) podemos poner por ejemplo: self.window.set_title("Mi Navegador Web - %s" % url)

- Modificar el tamaño por defecto de la ventana: en la línea:  self.window.set_default_size(800, 600) podemos cambiar la resolución por ejemplo a 1280x800:  self.window.set_default_size(1280, 800)

- Modificar la página de inicio: en vez de browser.open_url("http://google.es/") puedes poner, por ejemplo: browser.open_url("https://duckduckgo.com/")

- (Añadido/Editado) Para quitar la barra de direcciones, poned un símbolo # delante de la linea 37, de forma que quede:
#vbox.pack_start(self.url_text, fill=True, expand=False) .Con esto tenemos un navegador que se abre en la página que queramos y que al no tener barra de direcciones solo puede cambiarse de página si en la inicial hay enlaces, y si no los tiene no se puede cambiar de dirección. Puede ser útil para que sólo se pueda acceder a la página predeterminada, para una página con juegos, para ser usado por un niño pequeño.

Lógicamente sabiendo el lenguaje python se podría modificar mas a fondo el script.

-------------------------------------------

Como usarlo:

Como se puede ver este navegador no tiene barra de menús, ni barra de iconos, sino solo una barra de dirección, y si hemos elegido como página de inicio un motor de búsqueda, por ejemplo DuckDuckGo , tendremos también una barra de búsqueda. Para tener las otras opciones, muy simples (Atrás, Adelante, Detener, Recargar ) solo hay que hacer click con el botón derecho del ratón sobre cualquier zona de la ventana.




En la barra de direcciones hay que poner a mano la dirección completa de la página que se quiera visitar, incluyendo el código inicial http://

No tiene capacidad de guardar ningún tipo de información: ni marcadores, ni contraseñas, por lo que no creo que guarde tampoco cookies, etc; esto puede hacer incomodo su uso como navegador de uso cotidiano, pero a la vez puede hacerlo útil como navegador en modo anónimo.

-------------------------------------------

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

# Escrito por Daniel Fuentes B.
# Licencia: 
# BSD <http://www.opensource.org/licenses/bsd-license.php>

import pygtk
pygtk.require("2.0")
import gtk
import webkit

class Browser:
    # Ventana del programa
    def __init__(self):
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.set_position(gtk.WIN_POS_CENTER)
        self.window.set_default_size(800, 600)
        self.window.connect("destroy", self.on_quit)

        # Un vBox,en la parte de arriba hay una caja para
        # ingresar la direccion web, y abago se muestra
        # la pagina
        vbox = gtk.VBox()

        # La parte de la entrada de la url
        self.url_text = gtk.Entry()
        self.url_text.connect('activate', self.url_text_activate)

        # La parte en donde se muestra la pagina que se visita
        # (con scroll incluido)
        self.scroll_window = gtk.ScrolledWindow()
        self.webview = webkit.WebView()
        self.scroll_window.add(self.webview)

        # Unimos todo en el vBox
        vbox.pack_start(self.url_text, fill=True, expand=False)
        # El expand=False al empaquetarlo es para que el entry 
        #  no ocupe media pantalla
        vbox.pack_start(self.scroll_window, True, True)
        self.window.add(vbox)
        self.window.show_all() 

    # Definimos las señales y demas cosas de la ventana:
    def url_text_activate(self, entry):
    # al activar el entry (por ejemplo al hacer enter),
    # se obtiene el texto de la entry (la url) y 
    # se activa la funcion que abre la url
        self.open_url(entry.get_text())

    def on_quit(self, widget):
        gtk.main_quit()

    # La funcion magica que abre la url que se le pasa
    def open_url(self, url):
        "Funcion que carga la pagina elegida"
        # cambia el titulo de la ventana
        self.window.set_title("Ejemplo pywebkitgtk - %s" % url)
        # mostramos la direccion de la pagina abierta en el entry
        self.url_text.set_text(url)
        # abre la pagina
        self.webview.open(url)

if __name__ == "__main__":
    browser = Browser()
    # abrimos la pagina de inicio (opcional)
    browser.open_url("http://google.es/")
    gtk.main()

.

7 comentarios:

  1. Qué fácil es todo cuando se sabe. Ya tengo otro navegador.
    Saludos hatteras, y gracias.

    ResponderEliminar
  2. Muy interesante me encanta este artículo hatteras.

    ResponderEliminar
  3. funciona!
    ya había encontrado otros pero no andaban, hasta que me tope con este, funciona de maravilla en mi ubuntu 10.04

    ResponderEliminar
  4. Que bien que alguien encuentre útil mi código, yo lo escribí pensando en el caso de que alguien quisiera un navegador para integrarlo como parte de algún otro programa más grande.

    Saludos.

    ResponderEliminar
  5. Daniel Fuentes B.
    Te reitero las gracias por este navegador.
    Me alegro que hayas leído mi blog.

    ResponderEliminar
  6. Me gustaría saber si hay alguna forma de quitar la barra de direcciones y que sólo se pueda acceder a la página predeterminada, para una página con juegos para mi hermana pequeña.

    ResponderEliminar
  7. Fabian:

    Edita el script (ábrelo con gedit )
    -Para quitar la barra de direcciones, pon un símbolo # delante de la linea 37, de forma que quede:
    #vbox.pack_start(self.url_text, fill=True, expand=False)
    - Para que se abra en la página que quieras: en la linea 67
    browser.open_url("http://google.es/") sustituye http://google.es/ por la dirección de dicha página.

    Guarda los cambios realizados en el script y vuelve a ejecutarlo.

    ResponderEliminar

A la vez que haces un comentario, por favor da una puntuación al tema: malo, normal, bueno o muy bueno.
Gracias.