diff --git a/package.json b/package.json index 414ad8b..afb1f00 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "command-line-args": "^5.1.1", "express": "^4.17.1", "express-logging": "^1.1.1", + "generic-pool": "^3.7.1", "http-status-codes": "^1.4.0", "logops": "^2.1.1", "node-fetch": "^2.6.1", diff --git a/src/component/SeleniumBrowser.js b/src/component/SeleniumBrowser.js index 224180a..57e782d 100644 --- a/src/component/SeleniumBrowser.js +++ b/src/component/SeleniumBrowser.js @@ -1,9 +1,9 @@ const logger = require("logops") , config = require('../../config') , { Builder, Capabilities, By, Key, until } = require('selenium-webdriver') - , proxy = require('selenium-webdriver/proxy') , url = require('url') , fetch = require('node-fetch') + , pool = require('generic-pool') , { Options } = require('selenium-webdriver/chrome'); class SeleniumBrowser { @@ -15,6 +15,16 @@ class SeleniumBrowser { this.capabilities = Capabilities.chrome() this.sleep = m => new Promise(r => setTimeout(r, m)) this.isRecaptchaReseponseEmpty = false + this.pool = pool.createPool({ + create: () => { + return this.getDriver(); + }, + destroy: function (driver) { + driver.quit(); + } + }, { + max: 10, min: 1 + }); } getDriver() { @@ -36,13 +46,13 @@ class SeleniumBrowser { } else { logger.info('URL %s', uri) if (uri.indexOf('://') > 3) { - return this.getDriver().then(driver => { + return this.pool.acquire().then(driver => { return driver.get(uri) .then(() => driver.findElement(By.css('body'))) .then(body => body.getAttribute('innerHTML')) .then(html => this.getHtml(html)) .finally(() => { - driver.quit() + this.pool.release(driver) }) }) } else {