使用Selenium java长时间运行webdriver时内存增加

使用Selenium java长时间运行webdriver时内存增加,java,selenium,selenium-webdriver,headless-browser,firefox-headless,Java,Selenium,Selenium Webdriver,Headless Browser,Firefox Headless,我使用selenium java进行网页抓取,基本上应用程序会创建一个WebDriver,并在所有需要的页面上一直使用它(每隔1或2秒,它会对一个新页面执行get()调用并提取相关内容) 我使用的Firefox无头模式如下: String driverPath = this.config.getString("browser.firefox.driverPath"); FirefoxBinary firefoxBinary = new FirefoxBinary(); if (useHeadl

我使用selenium java进行网页抓取,基本上应用程序会创建一个WebDriver,并在所有需要的页面上一直使用它(每隔1或2秒,它会对一个新页面执行get()调用并提取相关内容)

我使用的Firefox无头模式如下:

String driverPath = this.config.getString("browser.firefox.driverPath");

FirefoxBinary firefoxBinary = new FirefoxBinary();
if (useHeadlessMode) {
    firefoxBinary.addCommandLineOptions("--headless");
}
System.setProperty("webdriver.gecko.driver", driverPath);
FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.setBinary(firefoxBinary);
webDriver = new FirefoxDriver(firefoxOptions);
我已经意识到,当应用程序运行2小时时,它将使用高达8GB的内存,get()调用变得非常慢(可能需要约10秒)

我的问题是,在创建WebDriver时,我是否会错过任何配置?或任何其他解决方案,以保持内存使用率在较低水平,因为我正在考虑在将应用程序部署到云中后启动多个(~100个WebDriver)


我正在考虑的解决方案是,对于一定数量的操作,对当前驱动程序执行driver.quit(),并初始化一个新的驱动程序。这听起来合理吗?

首先,您需要了解,无论何时使用webdriver启动浏览器,它都会在“temp”目录中创建一个临时配置文件,这会消耗您的内存

为了避免这种情况,您可以做两件事:

  • 从“Temp”目录中删除数据
  • 为浏览器创建一个配置文件并使用它,以便每次 启动浏览器它不会创建新的配置文件,也不会 消耗更多内存
从“Temp”目录中删除数据:

  • 按-->“Windows键”+“r”打开“运行”winodow
  • 键入“%TEMP%”,然后按“回车”按钮
  • 选择所有文件并通过“Shift+Delete”永久删除
  • 为浏览器创建配置文件:

  • 首先,如果Firefox打开,请关闭它
  • 按-->“Windows键”+“r”打开“运行”winodow
  • 键入“firefox.exe–p”并按“回车”按钮 注意:如果它没有打开,您可以尝试使用引号中的完整路径

    • 在32位Windows上:“C:程序文件Mozilla Firefox.exe”–p
    • 在64位:Windows上:“C:程序文件(x86)Mozilla Firefox.exe”–p
  • 将打开一个名为Firefox的对话框–选择用户配置文件

  • 从窗口中选择选项“创建配置文件”,向导将打开。点击下一步
  • 给出您要创建的配置文件名,然后单击“完成”按钮
  • 现在您的配置文件已经准备好,您可以选择您的配置文件并打开Firefox
  • 在程序中添加以下代码:

    ProfilesIni profile = new ProfilesIni();
    
    
    FirefoxProfile myprofile = profile.getProfile("Your_Profile_Name");
    
    
    // Initialize Firefox driver
    
    
    WebDriver driver = new FirefoxDriver(myprofile); 
    
  • 或讨论对你有帮助吗?