Search code examples
pythonlocal-storagebrowser-automationsplinter

Access and manage local storage from Splinter?


I would like to retrieve, manage and store data in local storage.

Is there an API for that in splinter?


Solution

  • There's no storage API available with splinter, but you can build your own with evaluate_script and execute_script :

    import json
    from splinter import Browser
    
    class LocalStorage:
    
      def __init__(self, browser):
        self.browser = browser
    
      def set(self, key, value):
        self.browser.execute_script(\
          "window.localStorage.setItem('{}',{})".format(key, json.dumps(value)))
    
      def get(self, key):
        return self.browser.evaluate_script(\
          "window.localStorage.getItem('{}')".format(key));
    
      def get_all(self):
        return self.browser.evaluate_script("""(function(){
          var items = {}, ls = window.localStorage;
          for (var i = 0, k; i < ls.length; i++)
            items[k = ls.key(i)] = ls.getItem(k);
          return items;
          })()""")
    
      def remove(self, key):
        self.browser.execute_script(\
          "window.localStorage.removeItem('{}');".format(key));
    
      def clear(self):
        self.browser.execute_script(\
          "window.localStorage.clear();")
    

    Usage example:

    from splinter import Browser
    
    browser = Browser()
    browser.visit("http://mdn.github.io/web-storage-demo")
    
    # get the local storage
    storage = LocalStorage(browser)
    
    # get an item
    print storage.get("bgcolor")
    
    # set an item
    storage.set("size", 452)
    
    # remove an item
    storage.remove("size")
    
    # get all items
    for key, value in storage.get_all().iteritems():
      print key + ': ' + value
    
    # delete all items
    storage.clear()