diff --git a/scrapy/http/request/form.py b/scrapy/http/request/form.py index fb9272a54..0c1c69a98 100644 --- a/scrapy/http/request/form.py +++ b/scrapy/http/request/form.py @@ -6,18 +6,14 @@ See documentation in docs/topics/request-response.rst """ import urllib -from cStringIO import StringIO -from scrapy.xlib.ClientForm import ParseFile +from lxml import html from scrapy.http.request import Request -from scrapy.utils.python import unicode_to_str -def _unicode_to_str(string, encoding): - if hasattr(string, '__iter__'): - return [unicode_to_str(k, encoding) for k in string] - else: - return unicode_to_str(string, encoding) + +class MultipleElementsFound(Exception): + pass class FormRequest(Request): @@ -35,41 +31,177 @@ class FormRequest(Request): self.headers['Content-Type'] = 'application/x-www-form-urlencoded' @classmethod - def from_response(cls, response, formname=None, formnumber=0, formdata=None, + def from_response(cls, response, formname=None, formnumber=0, formdata=None, clickdata=None, dont_click=False, **kwargs): - encoding = getattr(response, 'encoding', 'utf-8') - forms = ParseFile(StringIO(response.body), response.url, - encoding=encoding, backwards_compat=False) - if not forms: - raise ValueError("No