[1328]browser_cookie3从浏览器中提取Cookies

github:github.com/borisbabic/...

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

功能特点

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

使用方法

安装

r 复制代码
pip install browser-cookie3

python2安装

r 复制代码
pip install browser-cookie

提取Cookies

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

ini 复制代码
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!

使用Cookies

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

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

清除浏览器cookies

python 复制代码
import time
import browser_cookie3

def clear_cookies():
    # 获取所有浏览器的cookies
    cookies = browser_cookie3.load()
    
    # 清除所有cookies
    for cookie in cookies:
        cookie.delete()
    
    print("Cookies cleared!")

def run_periodically(interval, function):
    while True:
        function()
        time.sleep(interval)

# 每隔60秒清除一次cookies
run_periodically(60, clear_cookies)

注意事项

  • 权限问题:在Windows和Mac系统上,可能需要以管理员身份运行程序才能成功读取浏览器的Cookies。在Linux系统上,可能需要sudo权限。 当然大部分只需要普通账户权限,这时候可能需要输入该账户的密码才能成功读取Cookies。
  • 浏览器版本和兼容性:不同版本的浏览器可能在存储Cookies的方式上存在差异,因此browser_cookie3库可能需要更新以支持新版本的浏览器。
  • 安全性:使用browser_cookie3库提取Cookies时,需要注意安全性问题,确保不会泄露敏感信息。

browser_cookie3的非常规用法

跨浏览器/设备同步 cookies

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

自动化测试中的会话管理

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

爬虫中绕过登录限制

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

调试和验证网站行为

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

GPT4Free中的代码示例

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

python 复制代码
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,从而在网络爬虫或自动化脚本中模拟登录或访问需要认证的网页。然而,在使用时也需要注意权限、浏览器版本和安全性等问题。

相关推荐
文心快码BaiduComate12 小时前
Comate 搭载GLM-5.2:百万上下文,稳定支撑长程任务
前端·程序员·开源
程序员cxuan12 小时前
分享一下我最近常用的 10 个 Codex 小技巧。
人工智能·后端·程序员
Moonbit13 小时前
MoonBit ×CCF开源创新大赛 倒计时24天!快来提交你的作品
程序员·编程语言
zzzzzz31013 小时前
假如我是掘金管理员,我先给评论区装个'代码审查'系统
python·程序员·机器人
demo007x1 天前
Docling 文档转换以及技术架构分析
前端·后端·程序员
保持当下1 天前
分享一些程序员很棘手但是却又简单的工具
程序员·免费·js·工具
Hilaku1 天前
AI 写代码越快,为什么 Code Review 越不能省?
前端·javascript·程序员
程序员cxuan1 天前
LobsterAI 快把职业门槛打没了
人工智能·程序员
Coffeeee2 天前
Codachi — 藏在 Claude Code 状态栏里的电子宠物
人工智能·程序员·claude