我使用selenium进行网页抓取,基本上,该应用程序创建一个WebDriver,并对所有所需的页面使用它(每隔1或2秒,它将对一个新页面执行get()调用并提取相关内容)。
我使用的是火狐无头模式,如下所示:
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 WebDrivers)。
我正在考虑的解决方案是,对于一定数量的操作,对当前驱动程序执行driver.quit()并初始化一个新的驱动程序。这听起来合理吗?
发布于 2019-02-24 04:41:50
首先,您需要理解,每当您使用webdriver启动浏览器时,它都会在您的" temp“目录中创建一个临时配置文件,从而消耗您的内存。
为了避免,您可以做两件事:
删除"Temp“目录中的数据:
为浏览器创建配置文件:
- On 32 bit- Windows: "C:Program FilesMozilla Firefox.exe" –p
- On 64 bit : Windows: "C:Program Files(x86)Mozilla Firefox.exe" –p
https://stackoverflow.com/questions/54846306
复制相似问题