【问题标题】:How to get the localStorage with Python and Selenium WebDriver如何使用 Python 和 Selenium WebDriver 获取 localStorage
【发布时间】:2018-03-03 20:13:47
【问题描述】:

相当于:

driver.get_cookies()

获取 LocalStorage 而不是 Сookies?

【问题讨论】:

    标签: python selenium selenium-webdriver local-storage selenium-chromedriver


    【解决方案1】:

    python API 没有提供直接读/写本地存储的方法,但可以通过execute_script 来完成。

    class LocalStorage:
    
        def __init__(self, driver) :
            self.driver = driver
    
        def __len__(self):
            return self.driver.execute_script("return window.localStorage.length;")
    
        def items(self) :
            return self.driver.execute_script( \
                "var ls = window.localStorage, items = {}; " \
                "for (var i = 0, k; i < ls.length; ++i) " \
                "  items[k = ls.key(i)] = ls.getItem(k); " \
                "return items; ")
    
        def keys(self) :
            return self.driver.execute_script( \
                "var ls = window.localStorage, keys = []; " \
                "for (var i = 0; i < ls.length; ++i) " \
                "  keys[i] = ls.key(i); " \
                "return keys; ")
    
        def get(self, key):
            return self.driver.execute_script("return window.localStorage.getItem(arguments[0]);", key)
    
        def set(self, key, value):
            self.driver.execute_script("window.localStorage.setItem(arguments[0], arguments[1]);", key, value)
    
        def has(self, key):
            return key in self.keys()
    
        def remove(self, key):
            self.driver.execute_script("window.localStorage.removeItem(arguments[0]);", key)
    
        def clear(self):
            self.driver.execute_script("window.localStorage.clear();")
    
        def __getitem__(self, key) :
            value = self.get(key)
            if value is None :
              raise KeyError(key)
            return value
    
        def __setitem__(self, key, value):
            self.set(key, value)
    
        def __contains__(self, key):
            return key in self.keys()
    
        def __iter__(self):
            return self.items().__iter__()
    
        def __repr__(self):
            return self.items().__str__()
    

    使用示例:

    # get the local storage
    storage = LocalStorage(driver)
    
    # set an item
    storage["mykey"] = 1234
    storage.set("mykey2", 5678)
    
    # get an item
    print(storage["mykey"])      # raises a KeyError if the key is missing
    print(storage.get("mykey"))  # returns None if the key is missing
    
    # delete an item
    storage.remove("mykey")
    
    # iterate items
    for key, value in storage.items():
      print("%s: %s" % (key, value))
    
    # delete items
    storage.clear()
    

    【讨论】:

    • 关闭并重新打开浏览器后是否可以访问保存的值?
    • 可能不会,因为每个新窗口都处于隐身模式。
    【解决方案2】:

    我解决了:

    driver.execute_script("window.localStorage;")

    编辑:这是一个快速而简短的答案。有关更详细的答案,请参阅 Florent B. 的答案。

    【讨论】:

      【解决方案3】:

      查看问题的答案Getting the return value of Javascript code in Selenium

      基本上,您需要执行以下操作:

      from selenium import webdriver
      
      wd = webdriver.Firefox()
      wd.get("http://localhost/foo/bar")
      wd.execute_script("return localStorage.getItem('foo')")
      

      【讨论】:

        【解决方案4】:

        试试:

        driver.execute_script("window.localStorage.setItem('key','value');")
        driver.execute_script("window.localStorage.getItem('key');")
        

        【讨论】:

          猜你喜欢
          • 2014-01-26
          • 2013-02-12
          • 2014-02-22
          • 2012-01-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-14
          • 1970-01-01
          相关资源
          最近更新 更多