Selenium - 保留firefox缓存和历史文件

时间:2014-09-02 12:40:48

标签: firefox selenium

有没有办法在启动Firefox时禁用Selenium创建临时目录和配置文件?

我完全理解为什么Selenium会做的事情。我正在试验它,因为我尝试用它来创建Firefox缓存和历史记录,用于计算机取证培训。为此,我已经设置了一个带有原始用户帐户的干净虚拟机。我现在可以运行带有selenium API的Python脚本来启动firefox,访问几个网页并关闭。

问题是,它没有留下任何东西。如果你在最初的目的中使用硒,这当然是极好的,但它通过删除所有内容来阻止我的工作。

有没有办法禁用临时配置文件创建并启动Firefox,因为如果没有Selenium的用户运行它将启动它。

另外5:34 PM: Java API文档提到了一个系统属性webdriver.reap_profile,它可以防止删除临时文件。我找到了问题的根源,看来这不会出现在Python WebDriver类中:

def quit(self):
        """Quits the driver and close every associated window."""
        try:
            RemoteWebDriver.quit(self)
        except (http_client.BadStatusLine, socket.error):
            # Happens if Firefox shutsdown before we've read the response from
            # the socket.
            pass
        self.binary.kill()
        try:
            shutil.rmtree(self.profile.path)
            if self.profile.tempfolder is not None:
                shutil.rmtree(self.profile.tempfolder)
        except Exception as e:
            print(str(e))

退出时删除文件似乎是无条件的。我将通过注入

来解决这个问题
return self.profile.path

在self.binary.kill()之后。这可能会破坏各种各样的事情并且是一件可怕的事情,但它似乎完全符合我的要求。返回值告诉调用函数/ tmp下临时目录的随机名称。不优雅,但似乎有用。

1 个答案:

答案 0 :(得分:1)

另外5:34 PM:Java API文档提到了一个系统属性webdriver.reap_profile,它可以防止删除临时文件。我找到了问题的根源,看来这不会出现在Python WebDriver类中:

def quit(self):
        """Quits the driver and close every associated window."""
        try:
            RemoteWebDriver.quit(self)
        except (http_client.BadStatusLine, socket.error):
            # Happens if Firefox shutsdown before we've read the response from
            # the socket.
            pass
        self.binary.kill()
        try:
            shutil.rmtree(self.profile.path)
            if self.profile.tempfolder is not None:
                shutil.rmtree(self.profile.tempfolder)
        except Exception as e:
            print(str(e))

退出时删除文件似乎是无条件的。我将通过注入

来解决这个问题
return self.profile.path
在self.binary.kill()之后的/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py中的

。这可能会破坏各种各样的事情并且是一件可怕的事情,但它似乎完全符合我的要求。返回值告诉调用函数/ tmp下临时目录的随机名称。不优雅,但重新编译后似乎很烦人。

如果存在更优雅的解决方案,我很乐意将其标记为正确的解决方案。