【问题标题】:Removing localStorage file automatically in PhantomJS在 PhantomJS 中自动删除 localStorage 文件
【发布时间】:2015-01-24 16:04:51
【问题描述】:

我正在使用 PhantomJS 进行测试。我需要 PhantomJS 在执行以下命令后删除与上一个会话相关的所有信息,

phantom.exit()

实际上,它会这样做并且实际上会删除所有 cookie、缓存和历史记录。但是,它不会自动删除为 localStorage 命令保存的信息。我需要转到默认路径来保存此信息并手动删除文件。我想知道是否有任何自动删除此文件的方法。我测试了以下方法,但没有一个对我有用。

首先,我使用下面的命令来设置这个信息的新路径,但是PhantomJS并不关心它,只是再次使用它之前保存的信息。

--local-storage-path = path

其次,我使用 PhantomJS 的 page.open 部分使用以下命令清除路径,这对我也不起作用。

localStorage.clear();

【问题讨论】:

    标签: javascript local-storage phantomjs


    【解决方案1】:

    在完成测试后清除 localStorage 总是好的。您必须记住,您可以在 PhantomJS 中同时打开多个页面,但 localStorage 仅绑定到特定域。

    localStorage.clear(); 必须在页面上执行,而不是在虚拟上下文中:

    page.evaluate(function(){
        localStorage.clear();
    });
    

    因此,每次退出脚本之前,您都应该清除 localStorage(可能多次,具体取决于您访问了多少域)。或者,您可以尝试在脚本/页面加载开始时执行此操作,但很难做好。一个页面必须已经有一个目标 URL,但该页面还不能加载。否则,clear 可能会在页面 javascript 已经执行的时候出现。那么这可能应该每个域只执行一次。否则,在网站不同页面上的导航将会中断。


    另一个简单的解决方案是使用 fs 模块在脚本开头删除 Ofi labs 目录中的所有 localStorage 文件,但这可能会删除您不想删除的页面的 localStorage。

    【讨论】:

    • 谢谢。我在页面上下文中使用了该命令,但不是在退出幻像之前。感谢您的帮助。
    【解决方案2】:

    如果你在 linux x64 上使用 phantomJS 1.9.8,你可以测试这个包含 localStoragePath 修复的二进制文件:https://github.com/PatrickHuetter/phantomjs/releases/tag/1.9.8-fixedStoragePath

    如果您在另一个操作系统上使用 phantomjs,您可以查看我的 fork 并在您的平台上编译它。 https://github.com/PatrickHuetter/phantomjs/tree/localStoragePathFix

    PhantomJS 2.0 已包含此修复程序,因此如果您使用的是 2.0 或更高版本,则可以使用官方二进制文件。

    【讨论】:

      猜你喜欢
      • 2015-02-08
      • 1970-01-01
      • 2012-04-27
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      • 2016-04-19
      相关资源
      最近更新 更多