Sco*_*tus 6 python robobrowser mechanicalsoup
我正在使用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))
Run Code Online (Sandbox Code Playgroud)我的方法使用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))
Run Code Online (Sandbox Code Playgroud)在这两种情况下,我最终得到HTTP状态403和消息说CSRF verification failed. Request aborted.
mechanicalsoup并且robobrowser也会提交此输入.我对吗?或者我必须特别对待它?我robobrowser通过设置Referer标题让变种工作.
browser.session.headers['Referer'] = base_url
Run Code Online (Sandbox Code Playgroud)
所以对我有用的完整代码如下:
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.session.headers['Referer'] = base_url
browser.submit_form(form)
print(str(browser.select))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11048 次 |
| 最近记录: |