0

I have an automatically generated form, as shown below. My task is to check POST request from this form. It is necessary to unittest. How can I make a POST request from this form without browser using Python?

UPD:

  • Selenium - used browser and I want without it
  • requests - can not generate POST request from form (like click submit)
<form action="" method="post">

    <fieldset class="panel panel-default">

        <div class="panel-body">

                <input type="hidden" value="foo:mapping" name="__start__">


    <fieldset class="panel panel-default">
    <legend>Foo</legend>
        <div class="panel-body">

                <input type="hidden" value="foo1:mapping" name="__start__">


    <fieldset class="panel panel-default">
    <legend>Foo1</legend>
        <div class="panel-body">

                <input type="hidden" value="foo2:mapping" name="__start__">


    <fieldset class="panel panel-default">
    <legend>Foo2</legend>
        <div class="panel-body">

                <input type="hidden" value="foo3:mapping" name="__start__">


    <fieldset class="panel panel-default">
    <legend>Foo3</legend>
        <div class="panel-body">

                <input type="hidden" value="foo4:mapping" name="__start__">


    <fieldset class="panel panel-default">
    <legend>Foo4</legend>
        <div class="panel-body">

                <input type="hidden" value="foo5:mapping" name="__start__">


    <fieldset class="panel panel-default">
    <legend>Foo5</legend>
        <div class="panel-body">



    <div class="text-danger">Required</div>


    <div class="form-group">

        <label>Foo  </label>




        <input type="text" value="" name="foo" id="foo" class="form-control">
    </div>



        </div>
    </fieldset>

<input type="hidden" value="foo5:mapping" name="__end__">

        </div>
    </fieldset>

<input type="hidden" value="foo4:mapping" name="__end__">

        </div>
    </fieldset>

<input type="hidden" value="foo3:mapping" name="__end__">

        </div>
    </fieldset>

<input type="hidden" value="foo2:mapping" name="__end__">

        </div>
    </fieldset>

<input type="hidden" value="foo1:mapping" name="__end__">

        </div>
    </fieldset>

<input type="hidden" value="foo:mapping" name="__end__">

                <input type="hidden" value=":mapping" name="__start__">


    <fieldset class="panel panel-default">

        <div class="panel-body">

                <input type="hidden" value=":mapping" name="__start__">


    <fieldset class="panel panel-default">

        <div class="panel-body">

                <input type="hidden" value="foo100:mapping" name="__start__">


    <fieldset class="panel panel-default">
    <legend>Foo100</legend>
        <div class="panel-body">

                <input type="hidden" value=":mapping" name="__start__">


    <fieldset class="panel panel-default">

        <div class="panel-body">

                <input type="hidden" value=":mapping" name="__start__">


    <fieldset class="panel panel-default">

        <div class="panel-body">

                <input type="hidden" value=":mapping" name="__start__">


    <fieldset class="panel panel-default">

        <div class="panel-body">




    <div class="form-group">

        <label>Foo  </label>




        <input type="text" value="" name="foo" id="foo" class="form-control">
    </div>



        </div>
    </fieldset>

<input type="hidden" value=":mapping" name="__end__">

        </div>
    </fieldset>

<input type="hidden" value=":mapping" name="__end__">

        </div>
    </fieldset>

<input type="hidden" value=":mapping" name="__end__">

        </div>
    </fieldset>

<input type="hidden" value="foo100:mapping" name="__end__">

        </div>
    </fieldset>

<input type="hidden" value=":mapping" name="__end__">

        </div>
    </fieldset>

<input type="hidden" value=":mapping" name="__end__">

        </div>
    </fieldset>


<button class="btn btn-primary" type="submit">Submit</button>

</form>
2
  • You may use selenium to rule browser-like engine from Python or you may post form directly from python using requests (it is http client) Commented Oct 30, 2015 at 11:46
  • Your best bet would be to use an HTML parser such as BeautifulSoup to extract the input elements from the HTML and then use requests to create a POST request out of that. Commented Oct 30, 2015 at 11:56

1 Answer 1

1

You can use Selenium, indeed, but with a headless browser such as PhantomJS, so you do not need GUI and there will be no instance of a browser (like Firefox, Chrome, etc.).

Then in your code just change the instantiation of the WebDriver:

from selenium import webdriver

driver = webdriver.PhantomJS()
driver.get("...")
Sign up to request clarification or add additional context in comments.

1 Comment

I also tend to make this decision. It is a pity that no stand alone HTML form engine.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.