python登陆界面代码_python模拟登陆

python模拟登陆

1. 模拟登录主要掌握几点:要抓住真正要登录的URL;

要拿到要post的表单数据Form data,一般是以字典形式;

填写好header,有的网站可能会认证User-Agent,Host,Referer等等请求头。

2. 举例:模拟登录csdn博客

2.1. 首先打开csdn的登录页面

2.2. 登录过程分析

2.2.1. chrome浏览器按下F12打开开发者工具

点击Network,找到过滤器,筛选XHR,等会登录的时候,Method那一列会显示POST GET。

点击Headers旁边的叉,关闭后就是下面的效果

chrome_dev1.png

注意,分析工具要设置保存log (设置中Preferences标签下面Network的 “Preserve log”打开,页面中也可以看到这个开关),因为有些网站是登录后跳转,会把post那个log删除,当然,你也可以输入错误的密码就不会跳转,方便抓取。

2.2.2. 点击POST一栏可以看到url数据,Request Head数据,,post数据获取url链接数据

chrome_dev2.png

Head数据,比如

User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36

如果我们不指定 user agent,使用默认的,他不是一个正常的用户,所以可能会被网站拒绝了出现403错误。我们加上上面的Head数据就可以了。

Form Data表单数据

username:你的用户名

password:你的密码

lt:LT-736919-1mfGXdeQovq5gfbI9luJfgFMXYaPHg

execution:e8s1

_eventId:submit

Form Data表单数据分析

username和password是用户名和密码,lt数据每次打开这个登录网站都不一样,所以要去网站中获取。

2.3. 简单登录代码

开始需要获取网页中的’lt’数据,后面把表单数据post就可以了。

import requests

from bs4 import BeautifulSoup as bs

def get_lt_value(str):

'''

提取lt流水号,将数据化为一个字典

'''

soup = bs(str)

mydict = {}

for inp in soup.form.find_all('input'):

if inp.get('name') != None:

mydict[inp.get('name')] =inp.get('value')

return mydict

s = requests.Session()

r = s.get("http://passport.csdn.net/account/login")

dictvalue = get_lt_value(r.text)

header = {

'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0'}

payload ={

'username':'**',

'password':'**',

'lt':dictvalue["lt"],

'execution':'e1s1',

'_eventId':'submit'}

print(payload)

r = s.post("http://passport.csdn.net/account/login",data=payload,headers=header)

print(r.text)

2.4. 优化,保存cookie,这样下次就不需要重新发送登录请求了import requests

import time

import os

from bs4 import BeautifulSoup as bs

from http.cookiejar import LWPCookieJar

def get_lt_value(str):

'''

提取lt流水号,将数据化为一个字典

'''

soup = bs(str)

mydict = {}

for inp in soup.form.find_all('input'):

if inp.get('name') != None:

mydict[inp.get('name')] =inp.get('value')

return mydict

# cookie setting

s = requests.Session()

s.cookies = LWPCookieJar('cookiejar')

header = {'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0'}

if not os.path.exists('cookiejar'):

print("there is no cookie,setting")

r = s.get("http://passport.csdn.net/account/login")

dictvalue = get_lt_value(r.text)

payload ={

'username':'***',

'password':'***',

'lt':dictvalue["lt"],

'execution':'e1s1',

'_eventId':'submit'}

print(payload)

r = s.post("http://passport.csdn.net/account/login",data=payload,headers=header)

s.cookies.save(ignore_discard=True)

print(r.text)

else:

print("cookie exists,restore")

s.cookies.load(ignore_discard=True)

r = s.get("http://write.blog.csdn.net/postlist",headers=header)

print(r.text)

3. 参考文献:技术交流学习,请加QQ微信:631531977

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值