Skip to content

Commit a7105b7

Browse files
jorund1johannaengland
authored andcommitted
Fix crawler_test to work with CSRF-protected login form
1 parent e9d013d commit a7105b7

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

tests/integration/web/crawler_test.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from collections import namedtuple
1515
from http.client import BadStatusLine
1616
from lxml.html import fromstring
17+
import lxml.html
1718

1819
import pytest
1920

@@ -165,10 +166,15 @@ def _queue_links_from(self, content, base_url):
165166
self.queue.append('%s://%s%s' % (url.scheme, url.netloc, url.path))
166167

167168
def login(self):
168-
login_url = urljoin(self.base_url, '/index/login/')
169169
opener = build_opener(HTTPCookieProcessor())
170-
data = urlencode({'username': self.username, 'password': self.password})
171-
opener.open(login_url, data.encode('utf-8'), TIMEOUT)
170+
login_url = urljoin(self.base_url, "/index/login/")
171+
login_response = opener.open(login_url)
172+
login_html = lxml.html.parse(login_response)
173+
login_form = login_html.find("//form[@method='post'][@action='/index/login/']")
174+
login_form.fields["username"] = self.username
175+
login_form.fields["password"] = self.password
176+
login_data = urlencode(login_form.form_values()).encode("utf-8")
177+
opener.open(login_form.action, login_data, TIMEOUT)
172178
install_opener(opener)
173179

174180
def _add_seen(self, page, url=None):

0 commit comments

Comments
 (0)