This is a beta release (the first, and probably the last).
Changes since 0.0.2a: -Too many to list! -It works, unlike the alpha release. -Backported to 1.5.2. -Added TEXTAREA. -Many small improvements to the interface. -All HTML attributes are now accessible. -Interface is in terms of controls rather than items/inputs. -Disabled and readonly HTML attributes are now reflected in control interfaces. -Netscape / IE behaviour for default value of multiple-selection SELECT controls is now the default. RFC 1866 behaviour is still available. -Many bugs fixed. -Improved tests and documentation. -Much smaller package, thanks to removing an excessively large test file.
ClientForm is a Python module for handling HTML forms on the client side, useful for parsing HTML forms, filling them in and returning the completed forms to the server. It is a port (more-or-less) of Gisle Aas' Perl module HTML::Form, from the libwww-perl library.
import ClientForm import urllib2 request = urllib2.Request("http://www.acme.com/form.html") response = urllib2.urlopen(request) forms = ClientForm.ParseResponse(response) form = forms form["cheeses"] = ["parmesan", "leicester", "cheddar"] form.toggle("cheeses", "gorgonzola") form["author"] = "Gisle Aas" request2 = form.click("Thanks") response2 = urllib2.urlopen(request2)
print response2.geturl() print response2.info() # headers for line in response2.readlines(): # body print line
All of the standard input types are supported: TEXT, PASSWORD, HIDDEN, TEXTAREA, RESET, BUTTON, SUBMIT, IMAGE, RADIO, CHECKBOX and SELECT/OPTION. FILE (for file upload) is not yet supported, but will be in a future version.
Python 1.5.2 or above is required. To run the tests, you need the unittest module (from PyUnit, and a standard library module with Python 2.1 and above).