小能豆

如何使用 Python 的 Requests 模块“登录”网站?

python

我正在尝试使用 Python 中的 Requests 模块发布登录网站的请求,但它实际上不起作用。我是新手…所以我不知道是否应该将我的用户名和密码设置为 cookie 或我找到的某种 HTTP 授权类型(??)。

from pyquery import PyQuery
import requests

url = 'http://www.locationary.com/home/index2.jsp'

所以现在,我认为我应该使用“post”和 cookies......

ck = {'inUserName': 'USERNAME/EMAIL', 'inUserPass': 'PASSWORD'}

r = requests.post(url, cookies=ck)

content = r.text

q = PyQuery(content)

title = q("title").text()

print title

我感觉我对 cookie 的操作是错误的…我不知道。

如果登录不正确,主页的标题应该显示为“Locationary.com”,如果登录正确,则应该是“主页”。

如果您能向我解释一些有关请求和 cookie 的事情并帮助我解决这个问题,我将不胜感激。:D

谢谢。

…它仍然没有真正起作用。好的…这是您登录前主页 HTML 的内容:

</td><td><img src="http://www.locationary.com/img/LocationaryImgs/icons/txt_email.gif">    </td>
<td><input class="Data_Entry_Field_Login" type="text" name="inUserName" id="inUserName"  size="25"></td>
<td><img src="http://www.locationary.com/img/LocationaryImgs/icons/txt_password.gif"> </td>
<td><input  class="Data_Entry_Field_Login"  type="password" name="inUserPass"     id="inUserPass"></td>

所以我认为我做得对,但输出仍然是“Locationary.com

第二次编辑:

我希望能够长时间保持登录状态,并且每当我请求该域下的页面时,我希望显示的内容就像我已登录一样。


阅读 43

收藏
2024-06-27

共1个答案

小能豆

要使用 Python 中的 Requests 模块登录网站,通常需要提交 POST 请求,并将登录凭据放在表单数据中,而不是以 Cookie 的形式。Cookie 通常用于在登录后维护会话状态。

以下是登录的分步指南:

  1. 检查登录表单:检查登录表单的 HTML 以确定正确的字段和操作 URL。
  2. 提交登录表单:使用请求模块提交包含您的凭证的表单。
  3. 维护会话:使用requests.Session对象在多个请求之间保持登录会话。

您可以按照以下方式进行操作:

  1. 检查登录表单:从您提供的 HTML 代码片段来看,登录表单字段为inUserNameinUserPass。您需要在 POST 请求中将它们作为表单数据发送。
  2. 提交登录表单:
import requests
from pyquery import PyQuery

login_url = 'http://www.locationary.com/home/index2.jsp'
username = 'USERNAME/EMAIL'
password = 'PASSWORD'

# Create a session object
session = requests.Session()

# Define the login payload
payload = {
    'inUserName': username,
    'inUserPass': password
}

# Perform the login
response = session.post(login_url, data=payload)

# Check if login was successful by inspecting the response
if "Home Page" in response.text:
    print("Login successful")
else:
    print("Login failed")

# Now you can use `session` to make requests while logged in
content = response.text
q = PyQuery(content)
title = q("title").text()
print(title)
  1. 保持登录状态:使用该session对象进行后续请求以保持登录状态。例如:
# Make another request to a different page on the site
protected_url = 'http://www.locationary.com/some/protected/page'
response = session.get(protected_url)

# Parse the response
content = response.text
q = PyQuery(content)
title = q("title").text()
print(title)

解释:

  1. 会话对象:requests.Session()对象用于在多个请求中保存 cookie 和其他会话参数。
  2. 登录有效负载:有效负载包含登录凭据。这些凭据作为 POST 请求中的表单数据发送。
  3. 检查登录成功:检查登录请求的响应是否表示登录成功。这是通过检查仅在登录时出现在主页上的字符串来完成的。
  4. 发出后续请求:session.get()方法用于在保持登录状态的同时发出额外请求。

故障排除提示:

  • 检查响应:如果登录失败,请检查响应文本和状态代码,查看是否有任何错误消息或有关出错原因的提示。

  • 标头和令牌:某些网站要求在登录请求中包含其他标头或令牌(如 CSRF 令牌)。请在浏览器的开发人员工具中检查登录请求,看看是否有此类要求。

  • 使用requests调试:

启用日志记录以

requests

查看正在发生的事情的更多详细信息:

```
import logging
import http.client as http_client

http_client.HTTPConnection.debuglevel = 1

logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger(“requests.packages.urllib3”)
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True
```

通过遵循这些步骤并使用这些提示,您应该能够登录网站并维持您的会话。

2024-06-27