mirror of https://github.com/scrapy/scrapy.git
Merge pull request #1472 from olafdietsche/incomplete-submit-button
[MRG+1] Incomplete submit button
This commit is contained in:
commit
bc499cb552
|
|
@ -159,7 +159,7 @@ def _get_clickable(clickdata, form):
|
|||
# If we don't have clickdata, we just use the first clickable element
|
||||
if clickdata is None:
|
||||
el = clickables[0]
|
||||
return (el.get('name'), el.get('value'))
|
||||
return (el.get('name'), el.get('value') or '')
|
||||
|
||||
# If clickdata is given, we compare it to the clickable elements to find a
|
||||
# match. We first look to see if the number is specified in clickdata,
|
||||
|
|
@ -171,7 +171,7 @@ def _get_clickable(clickdata, form):
|
|||
except IndexError:
|
||||
pass
|
||||
else:
|
||||
return (el.get('name'), el.get('value'))
|
||||
return (el.get('name'), el.get('value') or '')
|
||||
|
||||
# We didn't find it, so now we build an XPath expression out of the other
|
||||
# arguments, because they can be used as such
|
||||
|
|
@ -179,7 +179,7 @@ def _get_clickable(clickdata, form):
|
|||
u''.join(u'[@%s="%s"]' % c for c in six.iteritems(clickdata))
|
||||
el = form.xpath(xpath)
|
||||
if len(el) == 1:
|
||||
return (el[0].get('name'), el[0].get('value'))
|
||||
return (el[0].get('name'), el[0].get('value') or '')
|
||||
elif len(el) > 1:
|
||||
raise ValueError("Multiple elements found (%r) matching the criteria "
|
||||
"in clickdata: %r" % (el, clickdata))
|
||||
|
|
|
|||
|
|
@ -767,6 +767,40 @@ class FormRequestTest(RequestTest):
|
|||
self.assertEqual(fs[b'test2'], [b'val2'])
|
||||
self.assertEqual(fs[b'button1'], [b'submit1'])
|
||||
|
||||
def test_from_response_submit_novalue(self):
|
||||
response = _buildresponse(
|
||||
"""<form action="post.php" method="POST">
|
||||
<input type="hidden" name="test1" value="val1">
|
||||
<input type="hidden" name="test2" value="val2">
|
||||
<input type="submit" name="button1">Submit</button>
|
||||
</form>""",
|
||||
url="http://www.example.com/this/list.html")
|
||||
req = self.request_class.from_response(response)
|
||||
self.assertEqual(req.method, 'POST')
|
||||
self.assertEqual(req.headers['Content-type'], b'application/x-www-form-urlencoded')
|
||||
self.assertEqual(req.url, "http://www.example.com/this/post.php")
|
||||
fs = _qs(req)
|
||||
self.assertEqual(fs[b'test1'], [b'val1'])
|
||||
self.assertEqual(fs[b'test2'], [b'val2'])
|
||||
self.assertEqual(fs[b'button1'], [b''])
|
||||
|
||||
def test_from_response_button_novalue(self):
|
||||
response = _buildresponse(
|
||||
"""<form action="post.php" method="POST">
|
||||
<input type="hidden" name="test1" value="val1">
|
||||
<input type="hidden" name="test2" value="val2">
|
||||
<button type="submit" name="button1">Submit</button>
|
||||
</form>""",
|
||||
url="http://www.example.com/this/list.html")
|
||||
req = self.request_class.from_response(response)
|
||||
self.assertEqual(req.method, 'POST')
|
||||
self.assertEqual(req.headers['Content-type'], b'application/x-www-form-urlencoded')
|
||||
self.assertEqual(req.url, "http://www.example.com/this/post.php")
|
||||
fs = _qs(req)
|
||||
self.assertEqual(fs[b'test1'], [b'val1'])
|
||||
self.assertEqual(fs[b'test2'], [b'val2'])
|
||||
self.assertEqual(fs[b'button1'], [b''])
|
||||
|
||||
def _buildresponse(body, **kwargs):
|
||||
kwargs.setdefault('body', body)
|
||||
kwargs.setdefault('url', 'http://example.com')
|
||||
|
|
|
|||
Loading…
Reference in New Issue