Python模拟登录

Version: 3.5

IDE: Pycharm

浏览器:Chrome

方法一:使用已知的cookie访问

服务器用cookie来区分不同的客户端,我们可以利用已知的cookie伪装成客户端来跟服务器进行对话。

以登录豆瓣为例,我们首先利用已有的账号登录,F12打开开发者工具--network,找到cookie并保存



之后我们便可以写代码了

# -*- coding: utf-8 -*-
import sys
import io
from urllib import request

#保存的cookie
cookies_str = r'bid=3waAC55M6es;_pk_ref.100001.8cb4=%5B%22%22%2C%22%22%2C1525523743%2C%22https%3A%2F%2Fwww.sogou.com%2Flink%3Furl%3DDSOYnZeCC_oPL4RhSawS8wPxkpP3ahf1Hoi5o78Y5aI.%22%5D;_pk_ses.100001.8cb4=*;__utma=30149280.1440123195.1525523744.1525523744.1525523744.1;__utmc=30149280;__utmz=30149280.1525523744.1.1.utmcsr=sogou.com|utmccn(referral)|utmcmd=referral|utmcct=/link;ap=1;ps=y;__yadk_uid=KkrhMC9Mwu99TnK2mThHMKtPuQrnqdTd;push_noty_num=0;push_doumail_num=0;__utmt=1;__utmv=30149280.14946; ll="118183"; _pk_id.100001.8cb4=9d48f465c1bee094.1525523743.1.1525525073.1525523743.; __utmb=30149280.4.10.1525523744'
#需要登录才能访问的网站
url = 'https://www.douban.com'
#设置请求头
req = request.Request(url)
req.add_header('cookie',cookies_str)
#选择一个User-Agent
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36')
resp = request.urlopen(req)
print(resp.read().decode('utf-8'))

2.模拟登录后再携带得到的cookie访问

在代码中直接提交用户名和密码来登录访问。

同样在浏览器的Network中

代码如下

# -*- coding: UTF-8 -*-
import sys
import io
import urllib.request
import http.cookiejar

#登录时需要POST的数据
data = {'source':'index_nav',
        'form_email':'******',
        'form_password':'******'}
post_data = urllib.parse.urlencode(data).encode('utf-8')

#设置请求头
headers = {'User-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}

#登录时表单提交到的地址(用开发者工具可以看到)
login_url = ' https://www.douban.com/accounts/login'

#构造登录请求
req = urllib.request.Request(login_url, headers = headers, data = post_data)

#构造cookie
cookie = http.cookiejar.CookieJar()

#由cookie构造opener
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookie))

#发送登录请求,此后这个opener就携带了cookie,以证明自己登录过
resp = opener.open(req)

#登录后才能访问的网页
url = 'https://www.douban.com'

#构造访问请求
req = urllib.request.Request(url, headers = headers)

resp = opener.open(req)

print(resp.read().decode('utf-8'))

如果直接使用requests库会更简单一些

# -*- coding: UTF-8 -*-
import requests
import sys
import io

#登录时需要POST的数据
data = {'source':'index_nav',
        'form_email':'******',
        'form_password':'******'}

#设置请求头
headers = {'User-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}

#登录时表单提交到的地址(用开发者工具可以看到)
login_url = 'https://www.douban.com/accounts/login'

#构造Session
session = requests.Session()

#在session中发送登录请求,此后这个session里就存储了cookie
#可以用print(session.cookies.get_dict())查看
resp = session.post(login_url, data)

#登录后才能访问的网页
url = 'https://www.douban.com'

#发送访问请求
resp = session.get(url)

print(resp.content.decode('utf-8'))


猜你喜欢

转载自blog.csdn.net/banzhuan133/article/details/80209377