鍍金池/ 問答/數據分析&挖掘  Python/ 模擬登陸csdn失敗,幫忙看下哪里有問題

模擬登陸csdn失敗,幫忙看下哪里有問題

從圖中得知表單需要哪些數據
938215-20160809204500793-1563778880.png

下面的兩行代碼保存cookies

session = requests.Session()
response = session.get(url, headers=headers).content

下面的代碼獲取表單所需數據

soup = BeautifulSoup(response, "lxml")
# 解析頁面獲取表單必須的數據
lt = soup.find(attrs={"type": "hidden", "name": "lt"})['value']
execution = soup.find(attrs={"type": "hidden", "name": "execution"})['value']
event_id = soup.find(attrs={"type": "hidden", "name": "_eventId"})['value']

最后還是登錄失敗


下面是完整代碼

import requests
from bs4 import BeautifulSoup

url = 'https://passport.csdn.net/account/login'

headers = {
        "Host": "passport.csdn.net",
        "Referer": "https://passport.csdn.net/account/login",
        "User-Agent": 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89'
                      ' Safari/537.36',
        "Origin": "https://passport.csdn.net"
    }


def login(username, password):
    captcha_solution = None
    captcha_id = None
    lt = None
    execution = None
    event_id = None
    post_data = {
        "username": username,
        "password": password,
        "rememberMe": "true",
    }
    session = requests.Session()
    response = session.get(url, headers=headers).content
    soup = BeautifulSoup(response, "lxml")
    # 解析頁面獲取表單必須的數據
    lt = soup.find(attrs={"type": "hidden", "name": "lt"})['value']
    execution = soup.find(attrs={"type": "hidden", "name": "execution"})['value']
    event_id = soup.find(attrs={"type": "hidden", "name": "_eventId"})['value']
    # print(lt)
    # print(execution)
    # print(event_id)
    # 將獲取的數據加入表單
    post_data['lt'] = lt
    post_data['execution'] = execution
    post_data['_eventId'] = event_id
    #  所有參數準備完畢 開始登錄
    html = session.post(url, data=post_data, headers=headers)
    print(type(html.cookies))
    for key, value in html.cookies.items():
        print(key+": "+value)
    print(html.text)
    # if html.url == 'https://www.csdn.net/':
    #     print(html.text)
    # else:
    #     print('fail')


login('15200689458', '199704105896abc')
回答
編輯回答
離觴

clipboard.png
可以通過捉包得出, 登錄url 不是https://passport.csdn.net/acc...
而是這個https://passport.csdn.net/acc...
session.post(url,data=post_data, headers=headers)
中的url 改回 https://passport.csdn.net/acc... 就可以登錄

2017年6月14日 11:43