使用Selenium java长时间运行webdriver时内存增加
我使用selenium java进行网页抓取,基本上应用程序会创建一个WebDriver,并在所有需要的页面上一直使用它(每隔1或2秒,它会对一个新页面执行get()调用并提取相关内容) 我使用的Firefox无头模式如下:使用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
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”目录中删除数据李>
- 为浏览器创建一个配置文件并使用它,以便每次 启动浏览器它不会创建新的配置文件,也不会 消耗更多内存
- 在32位Windows上:“C:程序文件Mozilla Firefox.exe”–p
- 在64位:Windows上:“C:程序文件(x86)Mozilla Firefox.exe”–p
ProfilesIni profile = new ProfilesIni();
FirefoxProfile myprofile = profile.getProfile("Your_Profile_Name");
// Initialize Firefox driver
WebDriver driver = new FirefoxDriver(myprofile);