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>
seleniumto rule browser-like engine from Python or you may post form directly from python usingrequests(it is http client)BeautifulSoupto extract theinputelements from the HTML and then userequeststo create a POST request out of that.