在 PhantomJS 中自动删除 localStorage 文件

Removing localStorage file automatically in PhantomJS

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

phantom.exit()

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

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

--local-storage-path = path

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

localStorage.clear();

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

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

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

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


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

如果你在 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 或更新版本,则可以使用官方二进制文件。