Selenium3 Python WebDriver API源码探析(15)Cookie管理

Cookie是从网站发送并存储在计算机中的一小段数据。 Cookies主要用于识别用户并加载存储的信息。WebDriver API提供了一系列与Cookie进行交互的内置方法。selenium\webdriver\remote\webdriver.py中的WebDriver类实现了相关方法。

Cookie相关API

添加Cookie

Selenium用于添加Cookie的方法为add_cookie(cookie_dict)cookie_dict参数的格式为一组已定义的可序列化JSON对象(字典),具体取值要求参见https://www.w3.org/TR/webdriver2/#cookies

add_cookie方法源码:

def add_cookie(self, cookie_dict):
    """
    Adds a cookie to your current session.

    :Args:
        - cookie_dict: A dictionary object, with required keys - "name" and "value";
        optional keys - "path", "domain", "secure", "expiry"

    Usage:
        driver.add_cookie({'name' : 'foo', 'value' : 'bar'})
        driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/'})
        driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/', 'secure':True})

    """
    self.execute(Command.ADD_COOKIE, {
    
    'cookie': cookie_dict})

获取全部Cookie

Selenium用于获取全部Cookie的方法为get_cookies()

get_cookies方法源码:

def get_cookies(self):
    """
    Returns a set of dictionaries, corresponding to cookies visible in the current session.

    :Usage:
        driver.get_cookies()
    """
    return self.execute(Command.GET_ALL_COOKIES)['value']

按名称获取Cookie

Selenium用于按名称获取Cookie的方法为get_cookie(name)name参数Cookie名称。

get_cookie(name)方法源码:

def get_cookie(self, name):
    """
    Get a single cookie by name. Returns the cookie if found, None if not.

    :Usage:
        driver.get_cookie('my_cookie')
    """
    if self.w3c:
        try:
            return self.execute(Command.GET_COOKIE, {
    
    'name': name})['value']
        except NoSuchCookieException:
            return None
    else:
        cookies = self.get_cookies()
        for cookie in cookies:
            if cookie['name'] == name:
                return cookie
        return None

删除所有 Cookie

Selenium用于删除所有 Cookie的方法为delete_all_cookies

delete_all_cookies方法源码:

def delete_all_cookies(self):
    """
    Delete all cookies in the scope of the session.

    :Usage:
        driver.delete_all_cookies()
    """
    self.execute(Command.DELETE_ALL_COOKIES)

按名称删除 Cookie

Selenium用于按名称删除 Cookie的方法为delete_cookie(name)name参数Cookie名称。

delete_cookie(name)方法源码:

def delete_cookie(self, name):
    """
    Deletes a single cookie with the given name.

    :Usage:
        driver.delete_cookie('my_cookie')
    """
    self.execute(Command.DELETE_COOKIE, {
    
    'name': name})

Cookie操作案例

from selenium import webdriver

driver = webdriver.Firefox()

driver.get("http://www.baidu.com")
# 添加名为test_key的Cookie
driver.add_cookie({
    
    "name": "test_key", "value": "value1"})
# 获取名为test_key的Cookie
print(driver.get_cookie("test_key"))
# 获取全部Cookie
print(driver.get_cookies())
# 删除名为test_key的Cookie
print(driver.delete_cookie("test_key"))
# 获取全部Cookie
print(driver.get_cookies())
# 删除全部Cookie
print(driver.delete_all_cookies())
# 获取全部Cookie
print(driver.get_cookies())
driver.quit()

猜你喜欢

转载自blog.csdn.net/mighty13/article/details/115103966