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

相关推荐
用户9704438781162 小时前
PHP 函数的参数顺序,它们是随机的吗?
后端·程序员·代码规范
舒一笑4 小时前
如何优雅统计知识库文件个数与子集下不同文件夹文件个数
后端·mysql·程序员
周小董5 小时前
[750]flask之异步非堵塞实现
程序员
周小董5 小时前
[73]python产生token及token验证
程序员
字节跳跃者6 小时前
SpringBoot + MinIO + kkFile 实现文件预览,这样操作更安全!
java·后端·程序员
周小董6 小时前
[1098]frida主动调用方法
程序员
周小董6 小时前
[874]python图片转字符串
程序员
周小董6 小时前
[1329]python报错AttributeError: module ‘collections‘ has no attribute ‘Callable‘
程序员
周小董6 小时前
[79]win10安装redis
程序员
周小董6 小时前
[671]adb连接模拟器详细教程
程序员