我試圖登錄到使用請求的網站,似乎正在打牆。任何意見,將不勝感激。使用Python的請求登錄
我試圖登錄到economist.com(無理由,只是我有一個用戶名和密碼),其登錄頁面爲https://www.economist.com/user/login
,其登錄表單的屬性爲action="https://www.economist.com/user/login?destination=%2F"
。
使用Chrome開發工具,形式爲數據登錄請求如下:
name: /////////
pass: ////////
form-build-id: form-483956e97a61f73fbc0ebf06b04dbe3f
form_id: user_login
securelogin_original_baseurl: https://www.economist.com
op: Log in
我的代碼獲取登錄頁面,使用BeautifulSoup確定form_id;嘗試使用我的用戶名和密碼,檢索的form_id和其他隱藏變量登錄到登錄名;然後使用BeautifulSoup檢查網頁,看看是否旗幟有一個登錄或註銷鏈接,以確定是否我在實際登錄
的代碼如下:
import requests
from bs4 import BeautifulSoup
# Setting user agent to a real browser instead of requests
headers = requests.utils.default_headers()
headers.update(
{
'User-Agent': 'Mozilla/5.0',
}
)
# create a session and login
s = requests.Session()
login_page = s.get('https://www.economist.com/user/login', headers=headers)
login = BeautifulSoup(login_page.text, 'lxml')
form = login.select_one("form > div > input")
payload = {
'name' : '////////////',
'pass' : '////////',
'form_build_id' : form['value'],
'form_id' : 'user_login',
'securelogin_original_baseurl' : 'https://www.economist.com',
'op' : 'Log in'
}
response = s.post("https://www.economist.com/user/login?destination=%2F",
data=payload, headers=headers)
# check homepage banner to see if login or logout link is there
url = "https://www.economist.com/"
r = s.get(url, headers=headers)
soup = BeautifulSoup(r.text, 'lxml')
banner = soup.select("div > div > span > a")
for table_row in banner:
print(table_row['href'])
運行時,該代碼顯示橫幅仍然有登錄鏈接,而不是登出鏈接,我認爲這意味着它沒有登錄。我知道我必須在這裏犯了一個非常簡單的錯誤,但在閱讀了這裏的其他類似問題之後,我似乎無法找到我要去的地方。我很感激任何關於這項工作的建議。
感謝。這工作。我認爲我的「表格」工作正常,儘管你的表格不太易破碎。我認爲我的問題一直是一個糟糕的測試,看看我是否登錄。你的更優雅(雖然/激活重定向我/謝謝你,但前提是相同的)。 – argent656