我试图更改一个网站上的帐户的用户名。需要3个员额参数:
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了?
发布于 2016-12-30 02:24:08
因此,解决方案是使用一个名为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)发布于 2016-12-29 19:36:37
尝试使用Session。它应该允许您在不同请求中使用相同的cookies、访问令牌等:
s = requests.Session()
url = "https://account.mojang.com"
r = s.post("https://account.mojang.com/login", data={'username':'theUsername','password':'thePassword','remember':'true'})
Logincookies = r.cookies
...
r = s.get(url + renamePage,cookies=Logincookies)在某些情况下,您可能还需要在headers中指定客户端,例如headers={ "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0" }
https://stackoverflow.com/questions/41381881
复制相似问题