模拟网站登录的思路
在我们模拟网站登录之前,我们需要分析网站登入需要哪些数据。我们可以通过抓包工具,研究网站登录,以及登录访问的头信息变化。
1.打开csdn的登录页面
2.输入用户名和密码登录,使用fiddler抓包。(我们只是为了知道上传的数据结构,不需要输入正确的用户名和密码)。如下所示:
3.检查网页源代码,分析上传的post的数据
通过上面的抓包分析,我们知道post上传form表单数据的具体参数。
表单参数:
username=aaaaa&password=vvvvvv<=LT-518075-B1UABMXz7mIEo25UFRgOtqg5iJKFhM&execution=e1s2&_eventId=submit
1
我们发现,除了我们需要输入的用户名和密码外,还有其他的参数,那么其他参数表示什么呢?我们可以通过登入页面的源代码。如:
实际上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
版权声明:本文为博主原创文章,转载请附上博文链接!
|
|