我正在使用 Python 3 作为脚本,该脚本将监视网页上用户个人资料中的更新。这个站点的登录受到 CSRF 对策的保护,这是一件好事。但是,我无法让我的脚本登录到该站点。
我的方法使用
mechanicalsoup
:import mechanicalsoup browser = mechanicalsoup.Browser() login_page = browser.get(base_url) login_form = login_page.soup.select(".form-signin")[0] login_form.find(attrs={"name": "username"})['value'] = 'username' login_form.find(attrs={"name": "password"})['value'] = 'password' page2 = browser.submit(login_form, login_url) print(str(page2.text))
我的方法使用
robobrowser
:import re from robobrowser import RoboBrowser browser = RoboBrowser(history=True) browser.open(base_url) form = browser.get_form(action='/login/') form["username"] = 'username' form["password"] = 'password' browser.submit_form(form) print(str(browser.select))
在这两种情况下,我都会得到一个 HTTP 状态403
和一条消息说CSRF verification failed. Request aborted.
- 任何想法如何解决这一问题?
- 有问题的表单有一个包含 CSRF 令牌的隐藏输入。我猜
mechanicalsoup
也robobrowser
将提交此输入。我对吗?还是我必须特殊对待? - 我认为这两个包使用的会话将处理像 cookie 之类的所有内容。有什么我错过的吗?