2014-09-02 189 views
1

有没有办法禁用Selenium创建一个临时目录和配置文件,当它启动Firefox?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下临时目录的随机名称。不优雅,但似乎工作。

+0

即使firefox正常启动,没有硒,它会使用现有的配置文件目录,或者将创建一个([参考](https://support.mozilla.org/en-US/kb/profiles-where-火狐-存储用户数据))。 – alecxe 2014-09-02 13:35:25

+0

但是当我正常启动它时,会创建〜/ .cache/mozilla/firefox/xxxxx目录,xxxxx在.mozilla/firefox中是相同的。当通过Selenium启动时,该目录不会出现。 这是我的问题。缓存似乎被禁用或它出现在临时的地方,并立即删除。 – Hannu 2014-09-02 13:46:20

+0

谢谢,现在更清楚 - 你是在谈论缓存,而不是个人资料。疑难杂症。 – alecxe 2014-09-02 13:48:26

回答

0

加法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)) 

缺失似乎是无条件的。我将仅self.binary.kill后注入

return self.profile.path 
在/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py

在我的情况下解决这个问题() 。这可能会打破各种各样的事情,这是一件可怕的事情,但它似乎正是我想要做的事情。返回值告诉调用函数/ tmp下临时目录的随机名称。不优雅,但重新编译后似乎工作。

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