.. _grab_forms:

Form Processing
===============

Grab can help you process web forms. It can automatically fill all input fields
that have default values, letting you fill only fields you need.
The typical workflow is:

* request a page
* fill input fields with `set_input` method
* submit the form with `submit` method

When you are using `set_input` you just specify the name of an input and the value, and
Grab automatically finds the form field containing the input with that name. When you
call `submit`, the automatically-chosen form is submitted (the form that has
the largest number of fields). You can also explicitly choose the form with
the `choose_form` method.

Let's look at a simple example of how to use these form features::

    >>> g = Grab()
    >>> g.request("http://ya.ru/")
    >>> g.doc.set_input("text", "grab documenation")
    >>> g.doc.submit()
    >>> g.doc.select('//a[@class="b-serp-item__title-link"]/@href').text()
    'https://grab.readthedocs.io/'

The form that has been chosen automatically is available in the `grab.form` attribute.

To specify input values you can use `set_input`, `set_input_by_id` and `set_input_by_xpath` methods.

