A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不二晨 金牌黑马   /  2019-3-8 09:58  /  805 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

模拟网站登录的思路

在我们模拟网站登录之前,我们需要分析网站登入需要哪些数据。我们可以通过抓包工具,研究网站登录,以及登录访问的头信息变化。

1.打开csdn的登录页面
csdn-login.png


2.输入用户名和密码登录,使用fiddler抓包。(我们只是为了知道上传的数据结构,不需要输入正确的用户名和密码)。如下所示:
csdn-fiddler.png


3.检查网页源代码,分析上传的post的数据

通过上面的抓包分析,我们知道post上传form表单数据的具体参数。

表单参数:

username=aaaaa&password=vvvvvv&lt=LT-518075-B1UABMXz7mIEo25UFRgOtqg5iJKFhM&execution=e1s2&_eventId=submit
1
我们发现,除了我们需要输入的用户名和密码外,还有其他的参数,那么其他参数表示什么呢?我们可以通过登入页面的源代码。如:

csdn-jiancha.png

实际上lt参数,execution参数,_eventId参数都是在页面内写死的,其中_eventId参数是不变的。所以我们需要先抓取登录的页面,获取页面的lt和execution参数。在从通过form表单post数据,完成Python登录。具体代码实现,请看代码示例。

代码示例:

import requests
from bs4 import BeautifulSoup


def get_headers():
    return {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36'
    }


def write_html(text, filename):
    """
    将返回的响应信息写入文件
    :param text: 响应页面内容
    :param filename:   保存的文件名
    :return:
    """
    with open(filename, 'w', encoding='utf-8') as f:
        f.write(text)


if __name__ == '__main__':
    # csdn登入的url
    login_url = "https://passport.csdn.net/account/login"
    # 通过requests的session请求
    seesion = requests.session()
    # 通过get请求登录页面的url,获取响应数据
    response = seesion.get(login_url, headers=get_headers())
    # 输出响应码
    print(response.status_code)
    # 将返回的html写入文件
    write_html(response.text, 'get_login.html')

    # 使用BeautifulSoup解析html,使用lxml的方式解析
    soup = BeautifulSoup(response.text, 'lxml')
    # 获取登入页面的input标签中lt的值,后面post表单上传登入信息需要
    lt = soup.select('input[name="lt"]')[0]['value']
    # 获取登入页面的input标签中execution的值,后面post表单上传登入信息需要
    execution = soup.select('input[name="execution"]')[0]['value']
    # 上传表单的data数据
    data = {
        "username": "your-username",
        "password": "your-password",
        "lt": lt,
        "execution": execution,
        "_eventId": "submit"
    }

    # 打印data数据
    print(data)

    # post请求上传data数据,模拟登入,获取响应结果
    response = seesion.post(login_url, data=data, headers=get_headers())
    # 打印响应的状态码
    print(response.status_code)
    # 将响应的信息写入文件
    write_html(response.text, 'login_success.html')

    # 通过get请求,请求个人主页,如果没有登入成功,则会返回登页,登入成功,则会获取到登入的个人信息
    response = seesion.get('https://my.csdn.net/my/mycsdn', headers=get_headers())
    # 打印响应码
    print(response.status_code)
    # 将响应结果保存文件
    write_html(response.text,'my.html')

最后,在my.html文件中,能获取登录的用户信息。因为我的页面跟多是使用js加载的,只能获取少量的数据。
---------------------
【转载,仅作分享,侵删】
作者:张行之
来源:CSDN
原文:https://blog.csdn.net/qq_33689414/article/details/78585309
版权声明:本文为博主原创文章,转载请附上博文链接!

1 个回复

倒序浏览
奈斯,感谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马