使用python请求库登录网站

使用python请求库登录网站,python,python-requests,http-request,Python,Python Requests,Http Request,我已经浏览了很多关于如何使用该库创建会话的线程,但是我尝试的所有方法都没有让我真正登录。我在网页设计和协议方面的经验很少,所以请指出我可能需要了解的任何基础知识。以下是我正在做的: import requests EMAIL = 'my_email' PASSWORD = 'my_pw' URL = 'https://account.guildwars2.com/login' session = requests.session() login_data = dict(username=E

我已经浏览了很多关于如何使用该库创建会话的线程,但是我尝试的所有方法都没有让我真正登录。我在网页设计和协议方面的经验很少,所以请指出我可能需要了解的任何基础知识。以下是我正在做的:

import requests

EMAIL = 'my_email'
PASSWORD = 'my_pw'
URL = 'https://account.guildwars2.com/login'

session = requests.session()

login_data = dict(username=EMAIL, password=PASSWORD)
r = session.post(URL, data=login_data)

req = session.get('https://leaderboards.guildwars2.com/en/na/achievements/guild/Darkhaven%20Elite')

print req.content
我看到的内容是如果我没有登录,我会看到的内容


我的语法是否有任何错误,或者问题是由我访问的登录页面的设置方式引起的?

@DanAlbert指出,我告诉您使用HTTP Auth,这不是您想要做的。因为一切看起来都是正确的,所以我假设您需要的可能只是HTTP身份验证

但是,从表单上看,可能您只是在dict中使用了错误的变量名:

import requests
s = requests.session()
login_data = dict(email='email', password='password')
s.post('https://account.guildwars2.com/login', data=login_data)
r = s.get('https://leaderboards.guildwars2.com/en/na/achievements/guild/Darkhaven%20Elite')
print r.content
如果您查看表单,它需要变量“email”和“password”。您有“用户名”和“密码”


无论如何,这取决于站点希望会话信息如何发送。会话对象将自动处理通过Cookie传递的会话,但不会处理需要以其他方式传递ID的会话,例如,作为URL上的查询字符串传递的会话,这在较旧的浏览器游戏中很常见。对于其他情况,您必须手动执行。无论如何,首先要做的是在浏览器中登录游戏时查看地址栏中的URL。如果没有什么明显的问题,请使用一个浏览器扩展,它将记录或记录每个请求发送的头,以准确地查看那里发生了什么。一旦你知道你遗漏了什么,就可以很容易地编写代码来填充它(或者,如果你不容易编写,那么在你发布到这里之后,其他人至少可以很容易地编写)。此外,《激战2》不是有一个API可以使用,而不是试图刮去面向用户的浏览器界面吗,但现在似乎非常有限。它没有提供所需的功能。是的,没有其他方法可以访问我正在查找的信息。只有当您登录并且是某个公会的成员时,该公会的“排行榜”才可用。在浏览器中重现这些访问效果很好。URL在输入时不会更改,登录浏览器后会将我重定向到一个通用URL,该URL将执行HTTP基本身份验证,这是通过向HTTP请求添加头来执行的。据我所知,他正在寻找一种登录网站的方式,就像他填写登录表(这将是一篇帖子)时那样。DanAlbert指出我试图实现的目标是正确的。@sebo在他指出这一点后不久,我编辑了我的回复。我不确定你是否看了,但是guildwars登录需要两个post变量“email”和“password”,但是你有“username”和“password”。我想如果你把用户名改成电子邮件,它会起作用的。@mchaelavila我试着按照你的建议做了更改,但仍然没有按预期让我登录。谢谢你的建议。@sebo我试着自己建立一个帐户来测试它,但它似乎需要购买一个序列号。所以我想我别无选择了。如果您有任何新信息,请告诉我们。祝你好运