如何使用Python獲取、寫入localStorage

8563084 發表於 2020-12-25
Python localStorage

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__()

用法示例:

# 獲取 local storage
storage = LocalStorage(driver)
# 設定一個值 item
storage["mykey"] = 1234
storage.set("mykey2", 5678)
# 獲取一個值 item
print(storage["mykey"])      # raises a KeyError if the key is missing
print(storage.get("mykey"))  # returns None if the key is missing
# 刪除一個值 item
storage.remove("mykey")
# 迴圈取值 items
for i in storage:
    print(i, storage[i])
# 清空 items
storage.clear()

補充細節,迴圈賦值先把class物件轉換為字典型別

# 迴圈賦值 items
storage = LocalStorage(driver)
print(storage)
d =dict(storage) #先把class物件轉換為字典型別
print(d)
storage.clear()
driver.refresh()
storage.clear()
 #迴圈賦值
for i in d:
    print(i, d[i])
    storage.set(i, d[i])
driver.refresh()




皇 冠 現金【886699.bet】 皇 冠 現金【886699.bet】 皇 冠 現金網【886699.bet】 皇 冠 現金網【886699.bet】 皇 冠 現金網【886699.bet】 皇 冠 現金網【886699.bet】 皇 冠 現金網【886699.bet】 皇 冠 現金網【886699.bet】 皇 冠 現金網【886699.bet】 皇 冠 現金網【886699.bet】 皇 冠 比分【886699.bet】 皇 冠 比分【886699.bet】 皇 冠 比分【886699.bet】 皇 冠 比分【886699.bet】 皇 冠 比分【886699.bet】 皇 冠 比分【886699.bet】 皇 冠 比分【886699.bet】 皇 冠 比分【886699.bet】 皇 冠 比分【886699.bet】 皇 冠 比分【886699.bet】 皇 冠 比分【886699.bet】 皇 冠 比分【886699.bet】 皇 冠 比分【886699.bet】 hg0088網址【886699.bet】 hg0088網址【886699.bet】 新2網址【886699.bet】 新2網址【886699.bet】 新2網址【886699.bet】 百 家 樂【886699.bet】 百 家 樂【886699.bet】 百 家 樂【886699.bet】 百 家 樂【886699.bet】 百 家 樂【886699.bet】 百 家 樂【886699.bet】 澳門 百 家 樂【886699.bet】 澳門 百 家 樂【886699.bet】 澳門 百 家 樂【886699.bet】 澳門 百 家 樂【886699.bet】 澳門 百 家 樂【886699.bet】 澳門 百 家 樂【886699.bet】 亞博【886699.bet】 亞博【886699.bet】 亞博【886699.bet】 亞博體育【886699.bet】 亞博體育【886699.bet】 亞博體育【886699.bet】 亞博體育【886699.bet】 亞博官網【886699.bet】 亞博官網【886699.bet】 亞博官網【886699.bet】 亞博官網【886699.bet】 亞博官網【886699.bet】 亞博官網【886699.bet】 亞博網址【886699.bet】 亞博網址【886699.bet】 澳門 銀 河【886699.bet】 澳門 銀 河【886699.bet】 澳門 銀 河【886699.bet】 澳門 銀 河【886699.bet】 澳門 銀 河【886699.bet】 銀 河 網址【886699.bet】 銀 河 網址【886699.bet】

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69989885/viewspace-2745160/,如需轉載,請註明出處,否則將追究法律責任。