【python】【爬虫】selenium模块使用cookie登录

目录

使用Session对象获取cookies

使用selenium模块获取cookies实现自动登录

获取cookies

使用cookies自动登录

存在的问题


在以前的文章中实现了向服务器发送POST请求模拟登录的操作【发送post请求】,但遇到验证码等情况时该方法就没用了。但我们可以使用当前登录账号的cookie信息,以实现下次访问该网站时自动登录

可以利用抓包或F12,在Network页面中找到当前登录的cookies信息,但这个方法获取的cookies值不一定可以直接使用。在这里学习中提供了两种自动获取cookies并使用cookies状态实现登录的方法。

使用Session对象获取cookies

使用request模块中的Session对象发送请求以获取当前的cookies信息,再次使用该对象访问该网址时,会直接使用上次记录下来的cookie信息,不再需要携带其他登录参数。

import requests
session = requests.Session()    #实例化对象
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}
data = {'userName':'12312451235', 'password':'123456'}    # 字典形式录入登录信息,这里要先看F12
url = 'http://passport.baidu.com/v2/?login'
# 发送POST
response = s.post(url=url, data=data, headers=headers)
print(response.cookies)    # 查看当前登录的cookies

# 再次登录验证,登录不使用data字段
response2 = s.get(url=url, headers=headers).text()
print(response2)

但这里获取的cookies信息只是方便这个session对象使用,下次再访问该网页时还是要写请求。故此可以使用selenium模块的方法,只需要把cookies信息添加到当前正在访问的对象,即可实现自动登录(个人觉得更方便)。

使用selenium模块获取cookies实现自动登录

使用selenium模块的get_cookies()获取当前网页登录的cookies信息,把获取的信息转为JSON串后可存入txt文件中。下一次使用在使用selenium访问该网站时直接添加cookies信息即可加载登录状态。

获取cookies

同样是需要先登录一次该网页才可以获取当前账号的cookies

from selenium import webdriver
import json

driver = webdriver.Firefox()
driver.get("https://passport.baidu.com/v2/?login")
# 登录
# 这里也可以引入time模块sleep()一定的时间,在这段时间内手动登录
driver.find_element("userName").send_keys("12312341234")
driver.find_element("password").send_keys("123456")
driver.find_element("linkText","登录").click()

cookies = driver.get_cookies()    # 获取cookies
f1 = open('cookie.txt', 'w')    #cookies存入文件JSON字符串
f1.write(json.dumps(cookies))
f1.close()

driver.close()

使用cookies自动登录

from selenium import webdriver
import json

driver = webdriver.Firefox()
driver.get("https://passport.baidu.com/v2/?login")
# 从保存文件中提取cookies
f1 = open('cookie.txt')
cookie = f1.read()
cookie_list = json.loads(cookie)    #json读取cookies
for c in cookie_list:
    driver.add_cookie(c)    #取出的cookie循环加入driver

driver.refresh()    # 刷新后页面显示已登录

存在的问题

因为cookies具有时效性,添加cookies时会报错。对于方法1可直接获取最新的cookie,但对于方法2可有以下方法:

在从文件读取cookie时,删除报错的"expiry"字段

f1 = open('cookie.txt')
cookie = f1.read()
cookie_list = json.loads(cookie)    #json读取cookies
for c in cookie_list:
    if 'expiry' in cookie:
        del cookie['expiry']    # 删除报错的expiry字段
    driver.add_cookie(c)    #取出的cookie循环加入driver

你可能感兴趣的:(python,#,爬虫,python)