我想登录网站,但我无法管理。我对网络搜索完全不熟悉,因此我遇到了困难。
我已经阅读了很多关于此的帖子和教程,并尝试了不同的选项。我猜这个问题是特定于网站的,我无法找到传递给post
方法的正确密钥。
我可以使用我的网页浏览器正常登录页面。虽然我不能使用这个脚本。
import requests
from lxml import html
session_requests = requests.session()
login_url = "https://app.foodcoops.at/fruchtgenuss/login"
headers = {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
result = session_requests.get(login_url)
tree = html.fromstring(result.text)
hidden_inputs = tree.xpath(r'//form//input[@type="hidden"]')
form = {x.attrib["name"]: x.attrib["value"] for x in hidden_inputs}
form["nick"] = "<username>"
form["password"] = "<password>"
form["commit"] = "Anmelden"
result = session_requests.post(
login_url,
data = form,
headers = headers
)
以下是我post
请求后的错误:
Response [404]
我做错了什么?请建议
答案 0 :(得分:1)
404
不公开信息,或者只是该页面不存在。所以很难说出发生了什么。
好的一点是它们是开源的。请在本地设置他们的系统 - 从github,并跟踪问题服务器端。
答案 1 :(得分:1)
我解决了这个问题:
感谢Heikki的帖子,我解决了部分问题:
必须从authenticity_token
网址中检索https://app.foodcoops.at/fruchtgenuss/login
。
但凭据必须发布到https://app.foodcoops.at/fruchtgenuss/session
。这就成了伎俩。
非常感谢您的所有答案。
下面的代码工作:
import requests
from lxml import html
session_requests = requests.session()
# url to retrieve the authentication_token
login_url = "https://app.foodcoops.at/fruchtgenuss/login"
# url to post the credentials
session_url = "https://app.foodcoops.at/fruchtgenuss/sessions"
headers = {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
result = session_requests.get(login_url)
tree = html.fromstring(result.text)
hidden_inputs = tree.xpath(r'//form//input[@type="hidden"]')
form = {x.attrib["name"]: x.attrib["value"] for x in hidden_inputs}
form["nick"] = "<username>"
form["password"] = "<password>"
form["commit"] = "Login"
result = session_requests.post(
session_url,
data = form,
headers = headers
)
答案 2 :(得分:0)
如果您查看登录页面中的html,您会看到服务器希望您将凭据发布到/ fruchtgenuss / sessions
<form class="form-horizontal" action="/fruchtgenuss/sessions" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" /><input type="hidden" name="authenticity_token" value="bgn5GP0XBCraMSxjaYfrq8wTeTMIlSiYdcc4hJhAJFr25B6Jaynezd+IgMX0OgjR4SlMqXWD8G87RyE/+AglPA==" />
<div class="control-group">
<label class="control-label" for="nick">
User
</label>
<div class="controls">
<input type="text" name="nick" id="nick" autocapitalize="off" autocorrect="off" />
</div>
</div>