使用 Python 请求登录的问题
Issues with logging in using Python Requests
注意:我在一个网站上执行此操作,其唯一目的是用于自动化测试
import requests
Payload = {
'username': 'test',
'password': 'test'
}
p = requests.post('https://petstore.octoperf.com/actions/Account.action', data=Payload)
print(p.text)
Payload 中的凭据是正确的,当我查看它打印的内容时,我没有看到 'sign out' 如果它已成功登录,我应该查看它。
好的,您遗漏了很多信息。您的负载不完整,缺少 signon
字段和隐藏字段 _sourcePage
和 __fp
。这些在您提交的表单中,因此您必须先发出 GET
请求才能捕获这些值。您还需要 jsessionid
cookie,因此请求会话应该很有用
import requests
from bs4 import BeautifulSoup
payload = {
'username': 'test',
'password': 'test',
'signon': 'Login'
}
url='https://petstore.octoperf.com/actions/Account.action'
# use a session to keep cookies alive
with requests.session() as s:
# make a get first to scrape input values
r = s.get(url)
# grab inputs and add their values to the payload
soup=BeautifulSoup(r.text, 'lxml')
inputs=soup.select('form[action*="Account"] input[type="hidden"]')
for inp in inputs:
payload[inp.attrs['name']]=inp.attrs['value']
# and connect finally with all data
r = s.post(url, data=payload)
soup=BeautifulSoup(r.text, 'lxml')
print(soup.select_one('#WelcomeContent').text.strip())
>>> Welcome test!
注意:我在一个网站上执行此操作,其唯一目的是用于自动化测试
import requests
Payload = {
'username': 'test',
'password': 'test'
}
p = requests.post('https://petstore.octoperf.com/actions/Account.action', data=Payload)
print(p.text)
Payload 中的凭据是正确的,当我查看它打印的内容时,我没有看到 'sign out' 如果它已成功登录,我应该查看它。
好的,您遗漏了很多信息。您的负载不完整,缺少 signon
字段和隐藏字段 _sourcePage
和 __fp
。这些在您提交的表单中,因此您必须先发出 GET
请求才能捕获这些值。您还需要 jsessionid
cookie,因此请求会话应该很有用
import requests
from bs4 import BeautifulSoup
payload = {
'username': 'test',
'password': 'test',
'signon': 'Login'
}
url='https://petstore.octoperf.com/actions/Account.action'
# use a session to keep cookies alive
with requests.session() as s:
# make a get first to scrape input values
r = s.get(url)
# grab inputs and add their values to the payload
soup=BeautifulSoup(r.text, 'lxml')
inputs=soup.select('form[action*="Account"] input[type="hidden"]')
for inp in inputs:
payload[inp.attrs['name']]=inp.attrs['value']
# and connect finally with all data
r = s.post(url, data=payload)
soup=BeautifulSoup(r.text, 'lxml')
print(soup.select_one('#WelcomeContent').text.strip())
>>> Welcome test!