python-爬虫-获取浏览器的cookies
1、封装浏览器对象
# -*- coding: utf-8 -*-
"""
封装类
将获取浏览器的对象封装成一个类
调用方法:
1、import Get_Browser
2、driver = Get_Browser.Get_Browsers().get_browser()
"""
from selenium import webdriver
class Get_Browsers:
def __init__(self):
pass
def get_browser(self):
self.options = webdriver.ChromeOptions()
#打开开发者模式
self.options.add_experimental_option('excludeSwitches', ['enable-automation'])
#打开浏览器后不关闭
self.options.add_experimental_option("detach", True)
# 禁用Blink功能
self.options.add_argument("--disable-blink-features=AutomationControlled")
#创建浏览器对象
self.driver = webdriver.Chrome(options=self.options)
# 覆盖window.navigate.webdriver
# 打开浏览器后在控制台输入:window.navigator.webdriver 看返回是否是undefined-说明浏览器没有识别是selenium打开的浏览器、如果是true说明是被反爬了
self.driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})
return self.driver
2、登陆网页获取cookies
# -*- coding: utf-8 -*-
"""
1、首次登陆网页获取cookie
2、拿到cookie的name:value值并序列化对象 、保存在文件里
3、读取文件中的cookie(反序列化为python对象)、返回cookie
"""
import time, pickle, os
from Get_Browser import Get_Browsers
#获取登录网站的cookie
def get_cookie(index_url, login_url):
"""
获取登录后的网页cookie
:param index_url: 网页首页
:param login_url: 网页登录界面
:return: 返回 被序列化的 cookies
"""
#打开登陆界面
driver.get(login_url)
while True:
time.sleep(5)
#这里看情况改(如果登录后的页面和首页不一致就不行了)
while driver.current_url == index_url:
#获取登陆后的cookie信息
# #返回一个列表字典-每个个字典中含有一个 name:value 键值对 、这个就是cookie的 名称和值
tbCookies = driver.get_cookies()
driver.quit()
#print(tbCookies)
print('==' * 60)
#遍历cookie
cookies = {}
for item in tbCookies:
#取出每个字典中的name和value 的值
cookies[item['name']] = item['value']
#保存cookie
output_path = open('taobaoCookies.pickle', 'wb')
#将 Python 对象序列化保存到文件中
#pickle.load(文件名) 反序列化、将文件内容反序列化为python对象
pickle.dump(cookies, output_path)
output_path.close()
#print(cookies)
return cookies
#读取获取的cookie信息-反序列化cookie为python对象
def read_cookies(filename, index_url, login_url):
"""
读取被序列化的cookie文件转为python对象
:param filename: 保存cookie文件名
:param index_url: 网页首页
:param login_url: 网页登录页
:return:
"""
if os.path.exists(filename):
read_path = open(filename, 'rb')
#pickle.load(read_path) 反序列化、将文件内容反序列化为 python对象
tbCookies = pickle.load(read_path)
else:
tbCookies = get_cookie(index_url, login_url)
return tbCookies
if __name__ == '__main__':
# 实例化对象
driver = Get_Browsers().get_browser()
index_url = "https://www.taobao.com/"
login_url = "https://login.taobao.com/member/login.jhtml"
filename = "taobaoCookies.pickle"
#首次手动登录获取cookie、这里可做判断、如果存在taobaoCookies.pickle 保存cookies的文件就跳过、不存在就调用类方法获取cookies
#get_cookie(index_url, login_url)
#使用这个cookie去请求网页即可
#详情看:E:\learn\python\mode1\work脚本\使用脚本\爬虫\网页自动登录\login\淘宝登录.py 中的request_adress(index_url):函数
cookies = read_cookies(filename, index_url, login_url)
print(cookies)