从浏览器中提取Cookies的实用工具库:browser_cookie3@python

Python的browser_cookie3库是一个用于从浏览器中提取Cookies的实用工具,它能够帮助开发者在编写网络爬虫或自动化脚本时,方便地获取和使用浏览器中已经保存的Cookies。以下是关于browser_cookie3库的详细介绍:

一、功能特点

  1. 多浏览器支持browser_cookie3支持从多种浏览器中提取Cookies,包括但不限于Chrome、Firefox、Opera、edge等。用户可以根据需要,指定从哪个浏览器中提取Cookies。
  2. 简单易用:库的使用非常直观,通过简单的函数调用即可获取指定浏览器或指定域名下的Cookies。
  3. 集成性强:提取出的Cookies可以无缝集成到各种HTTP请求库中,如requests,从而方便地进行网络请求。

二、使用方法

1. 安装

首先,需要安装browser_cookie3库。可以通过pip命令进行安装:

pip install browser-cookie3
2. 提取Cookies

安装完成后,可以使用以下方式提取指定浏览器或指定域名下的Cookies:

import browser_cookie3  
  
# 提取Chrome浏览器的Cookies,针对特定域名  
cookiejar = browser_cookie3.chrome(domain_name='www.baidu.com')  
  
# 如果需要提取Firefox浏览器的Cookies,可以调用firefox()方法  
# cookiejar = browser_cookie3.firefox(domain_name='www.example.com')  
  
# 遍历Cookies  
for cookie in cookiejar:  
    print(cookie.name, cookie.value)

选一个最近浏览过的网站网址,比如百度,然后我们就能看到百度的cookie!


3. 使用Cookies

提取出的Cookies可以作为一个参数传递给HTTP请求库,如requests,用于模拟登录或访问需要认证的网页:

import requests  
  
# 使用提取的Cookies进行网络请求  
response = requests.get('http://www.baidu.com/', cookies=cookiejar)  
print(response.text)


三、注意事项

  1. 权限问题:在Windows和Mac系统上,可能需要以管理员身份运行程序才能成功读取浏览器的Cookies。在Linux系统上,可能需要sudo权限。

         当然大部分只需要普通账户权限,这时候可能需要输入该账户的密码才能成功读取Cookies。

  1. 浏览器版本和兼容性:不同版本的浏览器可能在存储Cookies的方式上存在差异,因此browser_cookie3库可能需要更新以支持新版本的浏览器。
  2. 安全性:使用browser_cookie3库提取Cookies时,需要注意安全性问题,确保不会泄露敏感信息。

三、browser_cookie3的非常规用法

1. 跨浏览器/设备同步 cookies

虽然 browser_cookie3 主要是设计为与单个浏览器交互的,但你可以通过编写脚本,将从一个浏览器中提取的 cookies 同步到其他浏览器或设备。这可以用于实现跨设备的无缝体验,比如自动登录到多个设备上的相同网站。

2. 自动化测试中的会话管理

在自动化测试(如使用 Selenium)中,经常需要模拟用户登录。使用 browser_cookie3 可以从实际浏览器中获取已登录的会话 cookies,然后将其注入到测试环境中,以绕过登录过程,直接进行后续测试。

3. 爬虫中绕过登录限制

对于需要登录才能访问的网页,爬虫通常会遇到障碍。通过 browser_cookie3 获取登录后的 cookies,并将其添加到爬虫请求中,可以绕过登录页面,直接访问需要登录才能查看的内容。这对于数据采集和数据挖掘任务非常有用。

4. 调试和验证网站行为

在开发或测试网站时,了解网站如何处理 cookies 非常重要。使用 browser_cookie3 可以方便地查看和修改 cookies,以测试和验证网站在不同 cookie 状态下的行为。这有助于识别和解决与 cookies 相关的问题,如过期、跨域问题等。

四、GPT4Free中的代码示例

GPT4Free是一个非常好的chatgpt大模型应用软件,里面涉及到Cookies的应用部分:

def load_cookies_from_browsers(domain_name: str, raise_requirements_error: bool = True, single_browser: bool = False) -> dict:  
    """  
    从各种浏览器中加载指定域名的cookies。  
  
    参数:  
        domain_name (str): 要加载cookies的域名。  
        raise_requirements_error (bool): 如果缺少必要的库,是否抛出错误。默认为True。  
        single_browser (bool): 是否仅从第一个找到cookies的浏览器中读取并立即停止。默认为False。  
  
    返回:  
        dict: 包含cookie名称和值的字典。  
    """  
    # 检查是否已安装browser_cookie3库  
    if not hasattr(sys.modules[__name__], 'chrome'):  # 这里使用更通用的方式检查函数是否存在  
        if raise_requirements_error:  
            raise ImportError('请安装"browser_cookie3"包')  # 使用更标准的异常类型  
        return {}  
  
    cookies = {}  # 初始化一个空字典来存储cookies  
    # 定义一个包含多个浏览器cookie加载函数的列表  
    cookie_loaders = [_g4f, chrome, chromium, opera, opera_gx, brave, edge, vivaldi, firefox]  
  
    for cookie_fn in cookie_loaders:  
        try:  
            cookie_jar = cookie_fn(domain_name=domain_name)  # 尝试从指定浏览器加载cookies  
            if cookie_jar and debug.logging:  # 如果成功加载并且启用了日志记录  
                print(f"从{cookie_fn.__name__}读取了{domain_name}的cookies")  
            for cookie in cookie_jar:  # 遍历cookie罐中的所有cookie  
                if cookie.name not in cookies and (not cookie.expires or cookie.expires > time.time()):  
                    # 如果cookie尚未添加且未过期(或没有过期时间),则添加到字典中  
                    cookies[cookie.name] = cookie.value  
            if single_browser and cookie_jar:  
                break  # 如果设置了single_browser且找到了cookies,则停止循环  
        except BrowserCookieError:  # 假设这是browser_cookie3库定义的异常  
            pass  # 忽略这个异常,继续尝试其他浏览器  
        except Exception as e:  
            if debug.logging:  
                print(f"从{cookie_fn.__name__}读取{domain_name}的cookies时出错: {e}")  
  
    return cookies  # 返回包含所有找到的cookies的字典  

四、总结

browser_cookie3库是Python中一个非常实用的工具,它能够帮助开发者方便地获取浏览器中的Cookies,从而在网络爬虫或自动化脚本中模拟登录或访问需要认证的网页。然而,在使用时也需要注意权限、浏览器版本和安全性等问题。

这段代码存在以下问题: 1. 函数的参数使用了*,但是没有在函数中使用,这会让函数的使用者很困惑; 2. 导入模块时没有按照PEP8规范,应该单独一行导入; 3. 函数名不够清晰,无法准确地表达函数的功能; 4. 函数中调用了硬编码的文件路径,应该使用参数或配置文件来管理路径; 5. 函数中的注释不够详细,无法帮助使用者理解函数的实现原理; 6. 函数中没有对异常进行处理,如文件读取异常等; 7. 函数中的代码结构不够清晰,影响可读性。 修改后的代码如下: ```python import json from selenium import webdriver def create_chrome_driver(headless=False, executable_path=None): """ 创建谷歌浏览器对象,用selenium控制浏览器访问url :param headless: 是否为无头模式,默认为False :param executable_path: ChromeDriver的路径,默认为None :return: 创建好的浏览器对象 """ options = webdriver.ChromeOptions() if headless: options.add_argument('--headless') # 做一些控制上的优化 options.add_experimental_option('excludeSwitches', ['enable-automation']) options.add_experimental_option('useAutomationExtension', False) # 创建浏览器对象 browser = webdriver.Chrome(options=options, executable_path=executable_path) # 破解反爬措施 browser.execute_cdp_cmd( 'Page.addScriptToEvaluateOnNewDocument', {'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'} ) return browser def add_cookies(browser, cookie_file): """ 给浏览器对象添加登录的cookie :param browser: 浏览器对象 :param cookie_file: cookie文件路径 :return: None """ with open(cookie_file, 'r') as file: cookie_list = json.load(file) for cookie_dict in cookie_list: if cookie_dict.get('secure', False): browser.add_cookie(cookie_dict) ``` 修改后的代码使用了更好的函数名,将路径信息使用参数传入,增加了注释,使用了更好的异常处理方式,代码结构更加清晰易读。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值