selenium cookie 处理以及添加

本文介绍使用Selenium获取并精简网站Cookies的方法,包括保留必要字段、调整domain格式及添加Cookies到Driver中,确保Cookies的有效性和正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

selenium cookie 处理

# -*- coding: utf-8 -*-
"""
用于精简cookies, 添加cookie
1. selenium 获取的cookies 是列表类型
2. 将获取的cookies只保留"domain", "name", "path", "value"这4个字段
3. "path" 非必须的
4. 添加cookie是已字典的形式添加
注意:
在添加cookies时,domain 格式:.xx.xx, 否则cookies可能会失效
"""
from selenium import webdriver
from conf import settings


class SeleniumCookie(object):
    def __init__(self):
        self.chrome_options = webdriver.ChromeOptions()
        # 当google浏览器不是默认安装的时候,需要设置浏览器(也可以是其他浏览器,例如360安全浏览器)
        self.chrome_options.binary_location = r"C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe"

        self.driver = webdriver.Chrome(
            # executable_path="chromedriver.exe",  # chrome驱动器位置
            executable_path=settings.options["chromedriver"],  # chrome驱动器位置
            options=self.chrome_options,  # 扩展信息
        )

    def open_url(self):
        """
        打开网页
        :return:
        """
        # 访问网页
        url = "https://www.baidu.com/?tn=62095104_7_oem_dg"
        self.driver.get(url)

        # 获取 cookie, selenuum类型是列表
        cookie_ = self.driver.get_cookies()
        return cookie_

    @staticmethod
    def cookies_streamline1(cookie_list_):
        """
        driver cookies 精简1
        :param cookie_list_:
        :return:
        """
        cookie_list = []
        for cookie_dict_ in cookie_list_:
            cookie_dict = {}
            for item in cookie_dict_:
                # if item in ["name", "value", "domain"]:
                if item in ["domain", "name", "path", "value"]:
                    cookie_dict[item] = cookie_dict_[item]
                    cookie_list.append(cookie_dict)
        return cookie_list

    @staticmethod
    def cookies_streamline2(cookie_list_):
        """
        driver cookies 精简2
        :param cookie_list_:
        :return:
        """
        cookies_list = []
        for cookie_dict in cookie_list_:
            cookie_dict_ = {
                "name": cookie_dict['name'],
                "value": cookie_dict['value'],
                # "path": cookie['path'],   # 非必须
                "domain": cookie_dict['domain'],
                # "domain": ".xx.xx",  # domain 格式
            }
            cookies_list.append(cookie_dict_)
        return cookies_list
    
    def add_cookies(self, cookie_):
        """
        将cookies列表 添加进 driver
        :param cookie_: cookie 列表
        :return: 
        """
        # 清理原始cookies
        self.driver.delete_all_cookies()
        # 添加cookies
        for item in cookie_:
            # 以字典的方式添加
            self.driver.add_cookie(item)
    
    def main(self):
        cookie_ = self.open_url()
        # cookie_ = self.cookies_streamline1(cookie_)  # 精简cookie1
        # cookie_ = self.cookies_streamline2(cookie_)  # 精简cookie2
        # self.add_cookies(cookie_)  # 添加cookie
        print(cookie_)


if __name__ == '__main__':
    cookie = SeleniumCookie()
    cookie.main()

### 如何在 Selenium处理 CookiesSelenium 中,可以通过 `WebDriver` 提供的方法来操作 Cookies。这些方法允许开发者添加、删除以及检索特定的 Cookies 或者所有的 Cookies。 #### 添加 Cookie 可以使用 `add_cookie()` 方法向浏览器会话中添加一个新的 Cookie。此方法接受一个字典类型的参数,其中至少包含 `name` 和 `value` 键。下面是一个简单的例子: ```python from selenium import webdriver driver = webdriver.Chrome() try: driver.get("http://www.example.com") # 设置一个名为 'foo' 的 Cookie,其值为 'bar' cookie = {"name": "foo", "value": "bar"} driver.add_cookie(cookie) except Exception as e: print(e) finally: driver.quit() ``` 上述代码展示了如何通过 Python 脚本调用 `add_cookie()` 来创建新的 Cookie[^3]。 #### 获取所有 Cookies 如果想查看当前网页上存在的全部 Cookies,则可以利用 `get_cookies()` 函数返回列表形式的结果集。每一个元素都是代表单个 Cookie 的字典对象。 ```python all_cookies = driver.get_cookies() for c in all_cookies: print(c['name'], ':', c['value']) ``` 这段脚本遍历并打印出了每个已存储于站点上的名称及其对应的数值。 #### 获取指定名称的 Cookie 当只需要查找某个具体键名下的数据时,可以用到 `get_cookie_named()` 这样的功能(注意实际 API 可能略有差异)。这里给出的是 Java 版本的例子;对于其他编程语言绑定来说,语法可能会有所同但逻辑一致。 ```java // 假设已经初始化好了 WebDriver 实例 variable named 'driver'. Cookie loginCookie = driver.manage().getCookieNamed("login"); System.out.println(loginCookie.getValue()); ``` 上面展示了一个典型的场景——读取登录状态相关的特殊标记信息[^2]。 #### 删除单一或多个 Cookies 同样支持按需清除某些或者整个域内的缓存记录项。“逐条移除”的方式可通过传递目标标识符给 `delete_cookie()` 达成目的;而要清空整组关联项目则只需简单呼叫一次无参版别的同名命令即可实现全局清理效果。 ```python # 移除单独的一个叫作 'foo' 的 Cookie. driver.delete_cookie('foo') # 清理掉该网站地址范围内的一切可用型态的数据结构体实例化表现形式。 driver.delete_all_cookies() ``` 以上两行分别演示了个别案例与全面扫荡的操作手法。 --- ### 总结 综上所述,在自动化测试框架 Selenium中的确存在一套完整的解决方案用于管理 HTTP 请求头字段之一 —— Cookies 。无论是新增还是查询亦或是销毁环节都提供了相应的接口函数予以支撑保障业务流程顺畅运行的同时也极大地方便了开发人员调试维护工作量减少效率提升显著!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值