Software: Apache/2.2.16 (Debian). PHP/5.3.3-7+squeeze19 uname -a: Linux mail.tri-specialutilitydistrict.com 2.6.32-5-amd64 #1 SMP Tue May 13 16:34:35 UTC uid=33(www-data) gid=33(www-data) groups=33(www-data) Safe-mode: OFF (not secure) /usr/share/doc/python-mechanize/ drwxr-xr-x |
Viewing file: Select action/file-type: mechanizeStateful programmatic web browsing in Python, after Andy Lester's Perl
module
ExamplesThis documentation is in need of reorganisation and extension! The two below are just to give the gist. There are also some actual working examples. import re from mechanize import Browser br = Browser() br.open("http://www.example.com/") # follow second link with element text matching regular expression response1 = br.follow_link(text_regex=r"cheese\s*shop", nr=1) assert br.viewing_html() print br.title() print response1.geturl() print response1.info() # headers print response1.read() # body response1.close() # (shown for clarity; in fact Browser does this for you) br.select_form(name="order") # Browser passes through unknown attributes (including methods) # to the selected HTMLForm (from ClientForm). br["cheeses"] = ["mozzarella", "caerphilly"] # (the method here is __setitem__) response2 = br.submit() # submit current form # print currently selected form (don't call .submit() on this, use br.submit()) print br.form response3 = br.back() # back to cheese shop (same data as response1) # the history mechanism returns cached response objects # we can still use the response, even though we closed it: response3.seek(0) response3.read() response4 = br.reload() # fetches from server for form in br.forms(): print form # .links() optionally accepts the keyword args of .follow_/.find_link() for link in br.links(url_regex="python.org"): print link br.follow_link(link) # takes EITHER Link instance OR keyword args br.back() You may control the browser's policy by using the methods of
br = Browser() # Explicitly configure proxies (Browser will attempt to set good defaults). # Note the userinfo ("joe:password@") and port number (":3128") are optional. br.set_proxies({"http": "joe:password@myproxy.example.com:3128", "ftp": "proxy.example.com", }) # Add HTTP Basic/Digest auth username and password for HTTP proxy access. # (equivalent to using "joe:password@..." form above) br.add_proxy_password("joe", "password") # Add HTTP Basic/Digest auth username and password for website access. br.add_password("http://example.com/protected/", "joe", "password") # Don't handle HTTP-EQUIV headers (HTTP headers embedded in HTML). br.set_handle_equiv(False) # Ignore robots.txt. Do not do this without thought and consideration. br.set_handle_robots(False) # Don't add Referer (sic) header br.set_handle_referer(False) # Don't handle Refresh redirections br.set_handle_refresh(False) # Don't handle cookies br.set_cookiejar() # Supply your own mechanize.CookieJar (NOTE: cookie handling is ON by # default: no need to do this unless you have some reason to use a # particular cookiejar) br.set_cookiejar(cj) # Log information about HTTP redirects and Refreshes. br.set_debug_redirects(True) # Log HTTP response bodies (ie. the HTML, most of the time). br.set_debug_responses(True) # Print HTTP headers. br.set_debug_http(True) # To make sure you're seeing all debug output: logger = logging.getLogger("mechanize") logger.addHandler(logging.StreamHandler(sys.stdout)) logger.setLevel(logging.INFO) # Sometimes it's useful to process bad headers or bad HTML: response = br.response() # this is a copy of response headers = response.info() # currently, this is a mimetools.Message headers["Content-type"] = "text/html; charset=utf-8" response.set_data(response.get_data().replace("<!---", "<!--")) br.set_response(response) mechanize exports the complete interface of import mechanize response = mechanize.urlopen("http://www.example.com/") print response.read() so anything you would normally import from UserAgent vs UserAgentBase
The reason for the extra class is that
CompatibilityThese notes explain the relationship between mechanize, ClientCookie,
IMPORTANT: The following are the ONLY cases where
DocumentationFull documentation is in the docstrings. The documentation in the web pages is in need of reorganisation at the moment, after the merge of ClientCookie into mechanize. CreditsThanks to all the too-numerous-to-list people who reported bugs and provided
patches. Also thanks to Ian Bicking, for persuading me that a
A lot of credit must go to Gisle Aas, who wrote libwww-perl, from which
large parts of mechanize originally derived, and Andy Lester for the original,
To doContributions welcome! The documentation to-do list has moved to the new "docs-in-progress" directory in SVN. This is very roughly in order of priority
Getting mechanizeYou can install the old-fashioned way, or using EasyInstall. I recommend the latter even though EasyInstall is still in alpha, because it will automatically ensure you have the necessary dependencies, downloading if necessary. Subversion (SVN) access is also available. Since EasyInstall is new, I include some instructions below, but mechanize
follows standard EasyInstall / EasyInstall / setuptoolsThe benefit of EasyInstall and the new Using EasyInstall to download and install mechanize
If you're on a Unix-like OS, you may need root permissions for that last step (or see the EasyInstall documentation for other installation options). If you already have mechanize installed as a Python Egg (as
you do if you installed using EasyInstall, or using easy_install --upgrade mechanize You may want to read up on the Using EasyInstall to download and install the latest in-development (SVN HEAD) version of mechanizeeasy_install "mechanize==dev" Note that that will not necessarily grab the SVN versions of dependencies,
such as ClientForm: It will use SVN to fetch dependencies if and only if the
SVN HEAD version of mechanize declares itself to depend on the SVN versions of
those dependencies; even then, those declared dependencies won't necessarily be
on SVN HEAD, but rather a particular revision. If you want SVN HEAD for a
dependency project, you should ask for it explicitly by running
Note also that you can still carry on using a plain old SVN checkout as usual if you like. Using setup.py from a .tar.gz, .zip or an SVN checkout to download and install mechanize
python setup.py install Or, to get access to the same options that python setup.py easy_install mechanize DownloadAll documentation (including this web page) is included in the distribution. This is a stable release. Development release.
For old-style installation instructions, see the INSTALL file included in the distribution. Better, use EasyInstall. SubversionThe Subversion (SVN) trunk is http://codespeak.net/svn/wwwsearch/mechanize/trunk, so to check out the source: svn co http://codespeak.net/svn/wwwsearch/mechanize/trunk mechanize Tests and examplesExamplesThe It's worth knowing also that the examples on the ClientForm web page are useful for mechanize users, and are now real run-able scripts rather than just documentation. Functional testsTo run the functional tests (which do access the network), run the following command: python functional_tests.py Unit testsNote that ClientForm (a dependency of mechanize) has its own unit tests, which must be run separately. To run the unit tests (none of which access the network), run the following command: python test.py This runs the tests against the source files extracted from the package. For help on command line options: python test.py --help See alsoThere are several wrappers around mechanize designed for functional testing of web applications:
Richard Jones' webunit (this is not the same as Steven Purcell's code of the same name). webunit and mechanize are quite similar. On the minus side, webunit is missing things like browser history, high-level forms and links handling, thorough cookie handling, refresh redirection, adding of the Referer header, observance of robots.txt and easy extensibility. On the plus side, webunit has a bunch of utility functions bound up in its WebFetcher class, which look useful for writing tests (though they'd be easy to duplicate using mechanize). In general, webunit has more of a frameworky emphasis, with aims limited to writing tests, where mechanize and the modules it depends on try hard to be general-purpose libraries. There are many related links in the General FAQ page, too. FAQs - pre install
FAQs - usage
I prefer questions and comments to be sent to the mailing list rather than direct to me. John J. Lee, December 2008. |
:: Command execute :: | |
--[ c99shell v. 2.0 [PHP 7 Update] [25.02.2019] maintained by KaizenLouie | C99Shell Github | Generation time: 0.0192 ]-- |