【发布时间】:2019-07-17 16:22:48
【问题描述】:
我正在使用 selenium java 进行网页抓取,基本上该应用程序创建了一个 WebDriver 并一直使用它来处理所有需要的页面(每 1 或 2 秒它会执行一次 get() 调用新页面并提取相关内容)。
我正在使用这样的 Firefox headless 模式:
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() 并初始化一个新的。这听起来合理吗?
【问题讨论】:
标签: java selenium selenium-webdriver headless-browser firefox-headless