如何向selenium远程驱动程序添加cookie列表?

2024-09-29 23:32:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试向远程运行的selenium chrome实例添加cookie列表,单一的方法add_cookie对于我的需要来说太慢了,每个请求需要约5-10秒,大约1000-5000个cookie,这将变得很棘手。我曾想过按如下方式为ActionsChains类创建自定义Cookie输入:

from selenium.webdriver.common.actions import interaction 
from selenium.webdriver.common.actions.input_device import InputDevice
from selenium.webdriver.common.actions.interaction import (Interaction, Pause)

class CookieInput(InputDevice):
    def __init__(self, name):
        super(CookieInput, self).__init__()
        self.name = name
        self.type = interaction.KEY

    def encode(self):
        return {"type": self.type, "id": self.name, "actions": [acts.encode() for acts in self.actions]}

    def create_add_cookie(self, cookie):
        self.add_action(CookieInteraction(self, "addCookie", cookie))

    def create_delete_cookie(self, cookie):
        self.add_action(CookieInteraction(self, "deleteCookie", cookie))
        
class CookieInteraction(Interaction):

    def __init__(self, source, type_, cookie):
        super(CookieInteraction, self).__init__(source)
        self.type = type_
        self.cookie = cookie 

    def encode(self):
        return {"type": self.type, "value": self.cookie}
    
class CookieActions(Interaction):
    def __init__(self, source):
        if not source:
            source = CookieInput(KEY)
        self.source = source
        super(CookieActions, self).__init__(source) 
        
    def add_cookie(self, cookie):
        return self._cookie_action("create_add_cookie", cookie)

    def delete_cookie(self, cookie):
        return self._cookie_action("create_add_cookie", cookie)
    
    def add_cookies(self, cookies):
        for cookie in cookies:
            self.add_cookie(cookie)
        return self

    def delete_cookies(self, cookies):
        for cookie in cookies:
            self.delete_cookie(cookie)
        return self
    
    def _cookie_action(self, action, cookie):
        meth = getattr(self.source, action)
        meth(cookie)
        return self

应按如下方式使用:

actions = ActionChains(driver)
cookiedevice = CookieInput("cookies")
actions.w3c_actions.devices.append(cookiedevice)
actions.w3c_actions.cookie_action = CookieActions(cookiedevice)
[actions.w3c_actions.cookie_action.add_cookie(c) for c in cookies]
actions.perform()

这会引发类似的错误:

InvalidArgumentException: Message: invalid argument from invalid argument: type of action must be the string 'keyUp', 'keyDown' or 'pause' (Session info: chrome=91.0.4472.77)

这显然是chrome驱动程序本身的错误。有没有比推出定制的chrome驱动程序实现更直接的方法来实现这种逻辑?谢谢,祝你好运


Tags: fromselfactionsaddsourcereturninitcookie

热门问题