【问题标题】:Can not delete item from local storage in browser无法从浏览器的本地存储中删除项目
【发布时间】:2019-06-21 14:48:05
【问题描述】:

我正在使用 Java 中的 Selenium 开发自动化测试。我想删除本地和会话存储、cookie 等以“清除”WebDriver。我需要它从站点注销并为所有测试使用相同的 WebDriver,而不是为每个测试用例关闭和打开浏览器。

当我删除如图所示的整个本地存储时 - 它被删除。然后我重新加载页面。我没有登出,所有本地存储项又出现了。

然后我使用键盘上的“删除”键仅删除 active_user_session 项目。然后我立即发现自己退出了。

这很奇怪...为什么当我删除所有存储时我没有注销并且当我重新加载页面时信息恢复了。但是当我只删除一个 active_user_session 项目时,我立即退出了???

好的。我们上代码吧。

((JavascriptExecutor)(driver)).executeScript( String.format(
                "window.localStorage.removeItem('%s');", "access_token"
        ));

这个很好用。但我似乎需要删除 active_user_session 项...

((JavascriptExecutor)(driver)).executeScript( String.format(
                "window.localStorage.removeItem('%s');", "active_user_session"
        ));

此代码不起作用:active_user_session 仍然存在!!!

更有趣的是:

    ((JavascriptExecutor)(driver)).executeScript(
            "window.localStorage.clear();"
    );

删除除 active_user_session 之外的所有项目!

为什么???你能解释一下吗?可能我什么都不知道... 谢谢!

【问题讨论】:

    标签: javascript java selenium google-chrome local-storage


    【解决方案1】:

    试试这个

     driver.getSessionStorage().clear();
     driver.getLocalStorage().clear();
    

    有关此的更多信息,请查看link

    【讨论】:

    • 感谢您的回答。同一件事情。并非所有内容都已清除。
    • 尝试使用driver.manage().deleteAllCookies();删除所有cookies
    【解决方案2】:

    试试这个 - 会以老式的方式清除浏览器中的所有内容 - 但否则会完全自动化(即 cookie、登录等都将被再次请求)...

    #https://stackoverflow.com/questions/54404721/can-not-delete-item-from-local-storage-in-browser/54415520#54415520
    import time, os
    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.common.exceptions import JavascriptException
    
    def new_profile():
        global ev, parent, d, w
        global path_core, path_exec
        global ev
    
    
        path_core= os.path.join(os.path.expanduser("~"), 'Folder_Path_to_your_Code')
        path_exec =  os.path.join(path_core, "chromedriver.exe") #assumes chromedriver.exe saved in same location as your code...
        d = webdriver.Chrome(executable_path=path_exec)
        [ev] = [d.execute_script]
        parent = d.current_window_handle
        w = WebDriverWait(d,5)
        
        #d.implicitly_wait(0.5)
        print('new profile complete')
    
    
    def browser_clear(url=''):
        global start, ss, w
        [ss] = [time.sleep]
        w_old, w = w, WebDriverWait(d, 20)
        url = d.current_url if url == ''else url 
        script0 = '''document.querySelector('body').querySelector('settings-ui')["shadowRoot"].querySelector('settings-main')['shadowRoot'].querySelector('settings-basic-page')['shadowRoot'].querySelector('settings-privacy-page')['shadowRoot'].querySelector('#pages').querySelector('#clearBrowsingData')['shadowRoot'].lastElementChild.click()'''
        script1 = '''document.querySelector('body').querySelector('settings-ui')["shadowRoot"].querySelector('settings-main')['shadowRoot'].querySelector('settings-basic-page')['shadowRoot'].querySelector('settings-privacy-page')['shadowRoot'].querySelector('settings-clear-browsing-data-dialog')['shadowRoot'].querySelector('iron-pages').querySelector('#basic-tab').querySelector('settings-dropdown-menu')['shadowRoot'].lastElementChild.selectedIndex = 4;'''
        script2 = '''document.querySelector('body').querySelector('settings-ui')["shadowRoot"].querySelector('settings-main')['shadowRoot'].querySelector('settings-basic-page')['shadowRoot'].querySelector('settings-privacy-page')['shadowRoot'].querySelector('settings-clear-browsing-data-dialog')['shadowRoot'].querySelector('#clearBrowsingDataDialog').children[3].lastElementChild.parentElement.children[2].click()'''
        script_wait = '''{if (document.querySelector('body').querySelector('settings-ui')["shadowRoot"].querySelector('settings-main')['shadowRoot'].querySelector('settings-basic-page')['shadowRoot'].querySelector('settings-privacy-page')['shadowRoot'].querySelector('settings-clear-browsing-data-dialog')) {return true} else {return false}}'''
        d.get('chrome://settings/')
        ev(script0)
        start = time.time()
        while (time.time() - start <= 30) and ev(script_wait) == False: ss(0.5)
        ss(1)
        ev(script1), ss(0.5), ev(script2)
        start = time.time()
        while (time.time() - start <= 180) and ev(script_wait) == True: ss(0.5)
        try:
            d.get(url)
        except TimeoutError:
            w.until(lambda x: x.execute_script("return document.readyState") == "complete")
        w = w_old
        d.get(url)
    
    
    if __name__ == '__main__':
        new_profile()
        browser_clear()
    

    【讨论】:

      猜你喜欢
      • 2019-11-26
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多