Want to develop a web browser in python – let me get you started with a small working prototype.
This GUI interface done in Tkinter and uses the urllib module to get the URL data.
As you can see, the browser can read the contents of a site from the server. It currently does not parse HTML – hence you see raw HTML code for the fetched web page.
The design is also far from satisfactory – but the idea is to let a beginner have fun getting started with the project – not to write a full fledged production browser.
Here’s the complete code that works in Python 3.x:
from tkinter import * import urllib.request def go(): text.delete(1.0, END) with urllib.request.urlopen(entry.get()) as response: received_html = response.read() text.insert(1.0, received_html) browser_window = Tk() browser_window.title('knowpapa browser') label = Label(browser_window, text= 'Enter URL:') entry = Entry(browser_window) entry.insert(END, "http://knowpapa.com") button = Button(browser_window, text='Go', command = go) text = Text(browser_window) label.pack(side=TOP) entry.pack(side=TOP) button.pack(side=TOP) text.pack(side= TOP) browser_window.mainloop()
Note that this code will NOT WORK on Python 2.x as the urllib module has different behavior in both the versions.
Suggestions for Adding New features
You can possibly think of adding the following capabilities to the browser:
1) Fetch the URL content on a new thread of execution as the current code blocks the GUI loop while the browser fetches the content. This should be easy. Use the threading module from Python standard library.
2) HTML parsing – You can check out the standard python library for html parsing.
4) Add a Layout engine (look inside WebKit,Gecko, Presto)
5) Ability to Handle Forms
6) Ability to Handle Cookies – urllib2 again !
7) Strengthening Security
8) Manage authentication information for a series of requests- urllib2 again !
9) Managing proxies – urllib2 !
10) Improve the GUI to make it look like from this century (Tkinter ttk library).
Implementing a full-fledged web browser in Tkinter can be a daunting task and is not meant for beginners.If you still insist on using Tkinter, I would suggest you look at the source code of the Grail Browser. This web browser was originally written by Guido Van Rossum (inventor of Python) and it uses Tkinter library for the GUI.
I should warn that this though is not for the faint-hearted.
A simpler approach could be to use another GUI module(instead of Tkinter) such as wxPython or PyQT.Both these packages have a built-in widget for viewing HTML content.
wxPython, for instance, has a webview widget, while pyQT has qwebview. So you will not need to write and integrate HTML parser and writing a bare but functional browser should be easy.
If you believe in doing some-thing more state of the art, you can look at newer GUI library called Kiwi which provides a cross-platform development option that will work even on phones and tablets and is in my opinion, more stylish than other GUI modules but at the expense of adding some complexity.