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)
本文作者:little小新
本文链接:https://www.cnblogs.com/littlecc/p/18244377
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步