0

我正在使用 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 个 WebDrivers)。

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

4

1 回答 1

1

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

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

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

从“Temp”目录中删除数据:

  1. 按 --> "Windows key" + "r" 打开 "Run" 窗口
  2. 键入“%TEMP%”并按“ENTER”按钮
  3. 选择所有文件并通过“Shift + Delete”永久删除

为您的浏览器创建配置文件:

  1. 首先关闭Firefox(如果打开)。
  2. 按 --> "Windows key" + "r" 打开 "Run" 窗口
  3. 键入“ firefox.exe –p”并按“ENTER”按钮 注意:如果它没有打开,您可以尝试使用引号括起来的完整路径。

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

  5. 从窗口中选择“创建配置文件”选项,将打开一个向导。点击下一步
  6. 提供您要创建的个人资料名称,然后单击完成按钮
  7. 现在您的个人资料已准备就绪,您可以选择您的个人资料并打开 Firefox。
  8. 在您的程序中添加此代码:

    ProfilesIni profile = new ProfilesIni();
    
    
    FirefoxProfile myprofile = profile.getProfile("Your_Profile_Name");
    
    
    // Initialize Firefox driver
    
    
    WebDriver driver = new FirefoxDriver(myprofile); 
    
于 2019-02-24T04:41:50.490 回答