我正在尝试更改网站上帐户的用户名。需要3个POST参数:
1)newName
2)密码
3)authenticityToken
每次加载页面时都会随机生成authenticityToken。它是隐藏的输入类型:
<input type="hidden" name="authenticityToken" value="0640ce533fc7a51b88f79ce17cdbd611f4dc2360"/>
我正在尝试实现的是获取authenticityToken的值,并在同一页面上发布如上所述的3个必需参数。目前,我的代码使用GET请求接收了authenticityToken,然后发送了另一个POST请求。它返回
错误的真实性令牌
我当前使用的代码如下:
import requests
from bs4 import BeautifulSoup
url = "https://account.mojang.com"
#Login and save cookies
r = requests.post("https://account.mojang.com/login", data={'username':'theUsername','password':'thePassword','remember':'true'})
Logincookies = r.cookies
#Parse the page to get rename link
soup = BeautifulSoup(r.text, "html.parser")
renamePage = None
sources = soup.findAll('a',{"href":True})
for source in sources:
if("/me/renameProfile/" in source["href"]):
renamePage = source["href"]
#Get AuthToken
authToken = None
r = requests.get(url + renamePage,cookies=Logincookies)
parser = BeautifulSoup(r.text,"html.parser")
srcs = parser.findAll('input')
for src in srcs:
if(src["name"] == "authenticityToken"):
authToken = src["value"]
print(authToken)
r = requests.post(url + renamePage, cookies=Logincookies, data={'newName':'theNewUsername','password':'thePassword','authenticityToken':authToken})
print(r.text)
再一次,我该如何做才能使GET和POST请求一起执行,以便它不使用新页面并接收新的authenticityToken?
因此,解决方案是使用一个名为RoboBrowser的库,并为它提供与我之前的请求相同的会话:
import requests
from bs4 import BeautifulSoup
from robobrowser import RoboBrowser
session=requests.session()
r = session.post(...)
r = session.get("...")
browser.open(url+renamePage)
rename_form = browser.get_form(class_='standard')
rename_form['newName'].value = "theNewUser"
rename_form['password'].value = "theNewPass"
browser.submit_form(rename_form)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句