diff --git a/scrapy/http/request/form.py b/scrapy/http/request/form.py index d2ebf011a..50533ea42 100644 --- a/scrapy/http/request/form.py +++ b/scrapy/http/request/form.py @@ -77,11 +77,11 @@ def _get_inputs(form, formdata, dont_click, clickdata, response): except (ValueError, TypeError): raise ValueError('formdata should be a dict or iterable of tuples') - inputs = [(n, v) for n, v in form.form_values() if n not in formdata] + inputs = [(n, u'' if v is None else v) for n, v in form.fields.items() if n not in formdata] if not dont_click: clickable = _get_clickable(clickdata, form) - if clickable and clickable[0] not in formdata: + if clickable and clickable[0] not in formdata and not clickable[0] is None: inputs.append(clickable) inputs.extend(formdata.iteritems()) diff --git a/scrapy/tests/test_http_request.py b/scrapy/tests/test_http_request.py index 8a590f7eb..2110e73f4 100644 --- a/scrapy/tests/test_http_request.py +++ b/scrapy/tests/test_http_request.py @@ -496,6 +496,33 @@ class FormRequestTest(RequestTest): response = HtmlResponse("http://www.example.com/formname.html", body=respbody) self.assertRaises(IndexError, self.request_class.from_response, response, formname="form3", formnumber=2) + def test_from_response_missed_value(self): + respbody = """ +
+ + + + + +