基本上,您传递了错误的登录 url,而您跳过的重点是保持会话,首先获取 Session id,然后将其传递给 headers
import requests
from bs4 import BeautifulSoup
import urllib3
urllib3.disable_warnings()
headers = {
'COOKIE_SUPPORT': 'true',
'GUEST_LANGUAGE_ID': 'en_US',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0'
}
data = {
'_58_redirect': '',
'login': 'a@a.com',
'password': 'testpass'
}
url = 'https://www.virtelaview.net/web/guest/home?p_auth=&p_p_id=58&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&saveLastPath=0&_58_struts_action=/login/login'
with requests.Session() as s:
s.get(url, headers=headers, verify=False)
bo = dict(s.cookies)
headers['JSESSIONID'] = bo['JSESSIONID']
r = s.post(url, data=data, verify=False, headers=headers)
soup = BeautifulSoup(r.text, 'html.parser')
print(soup.prettify())
因为我使用了错误的登录信息,所以我得到了以下回复:
<div class="portlet-msg-error">Authentication failed. Please try again.</div>
这证明我走在正确的轨道上。
如果上面的代码没有记录你的另一个解决方案。这里我在每个请求期间都获取了p_auth 参数value,因为它是动态的。
import requests
from bs4 import BeautifulSoup
import urllib3
urllib3.disable_warnings()
headers = {
'COOKIE_SUPPORT': 'true',
'GUEST_LANGUAGE_ID': 'en_US',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0'
}
data = {
'_58_redirect': '',
'login': 'a@a.com',
'password': 'testpass'
}
url = 'https://www.virtelaview.net/web/guest/home?p_auth=&p_p_id=58&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&saveLastPath=0&_58_struts_action=/login/login'
with requests.Session() as s:
s.get(url, headers=headers, verify=False)
bo = dict(s.cookies)
headers['JSESSIONID'] = bo['JSESSIONID']
r = s.post(url, data=data, verify=False, headers=headers)
soup = BeautifulSoup(r.text, 'html.parser')
for item in soup.findAll('form', attrs={'class': 'aui-form'}):
login = item.get('action')
r1 = s.post(login, data=data, verify=False, headers=headers)
soup1 = BeautifulSoup(r1.text, 'html.parser')
print(soup1.prettify())