Version 0.11
This release focuses on fixing bugs related to uncommon HTTP/HTML
scenarios and on improving the documentation.
Bug fixes
* Constructing a :class:~mechanicalsoup.Form instance from a
bs4.element.Tag whose tag name is not form will now emit a warning,
and may be deprecated in the future.
* **Breaking Change:** :class:~mechanicalsoup.LinkNotFoundError now derives
from Exception instead of BaseException. While this will bring the
behavior in line with most people's expectations, it may affect the behavior
of your code if you were heavily relying on this implementation detail in
your exception handling.
* Improve handling of button submit elements. Will now correctly ignore
buttons of type button and reset during form submission, since they
are not considered to be submit elements.
* Do a better job of inferring the content type of a response if the
Content-Type header is not provided.
* Improve consistency of query string construction between MechanicalSoup
and web browsers in edge cases where form elements have duplicate name
attributes. This prevents errors in valid use cases, and also makes
MechanicalSoup more tolerant of invalid HTML.
Version 0.10
Main changes:
Added StatefulBrowser.refresh() to reload the current page with the same request.
StatefulBrowser.follow_link, StatefulBrowser.submit_selected() and the new StatefulBrowser.download_link now sets the Referer: HTTP header to the page from which the link is followed.
Added method StatefulBrowser.download_link, which will download the contents of a link to a file without changing the state of the browser.
The selector argument of Browser.select_form can now be a bs4.element.Tag in addition to a CSS selector.
Browser.submit and StatefulBrowser.submit_selected accept a larger number of keyword arguments. Arguments are forwarded to requests.Session.request.
Internal changes:
StatefulBrowser.choose_submit will now ignore input elements that are missing a name-attribute instead of raising a KeyError.
Private methods Browser._build_request and Browser._prepare_request have been replaced by a single method Browser._request.
Version 0.8
Main changes:
* `Browser` and `StatefulBrowser` can now be configured to raise a
`LinkNotFound` exception when encountering a 404 Not Found error.
This is activated by passing `raise_on_404=True` to the constructor.
It is disabled by default for backward compatibility, but is highly
recommanded.
* `Browser` now has a `__del__` method that closes the current session
when the object is deleted.
* A `Link` object can now be passed to `follow_link`.
* The user agent can now be customized. The default includes
`MechanicalSoup` and its version.
* There is now a direct interface to the cookiejar in `*Browser`
classes (`(set|get)_cookiejar` methods).
* This is the last MechanicalSoup version supporting Python 2.6 and
3.3.
Bug fixes:
* We used to crash on forms without action="..." fields.
* The `choose_submit` method has been fixed, and the `btnName`
argument of `StatefulBrowser.submit_selected` is now a shortcut for
using `choose_submit`.
* Arguments to `open_relative` were not properly forwarded.
Internal changes:
* The testsuite has been greatly improved. It now uses the pytest API
(not only the `pytest` launcher) for more concise code.
* The coverage of the testsuite is now measured with codecov.io. The
results can be viewed on:
https://codecov.io/gh/hickford/MechanicalSoup
* We now have a requires.io badge to help us tracking issues with
dependencies. The report can be viewed on:
https://requires.io/github/hickford/MechanicalSoup/requirements/
* The version number now appears in a single place in the source code.
A Python library for automating interaction with websites.
MechanicalSoup automatically stores and sends cookies, follows
redirects, and can follow links and submit forms. It doesn't do
Javascript.