ewrewr
This commit is contained in:
@@ -16,31 +16,41 @@ class SeleniumBrowser {
|
||||
this.sleep = m => new Promise(r => setTimeout(r, m))
|
||||
this.pool = pool.createPool({
|
||||
create: () => {
|
||||
logger.info('Create new driver instance')
|
||||
return this.getDriver();
|
||||
},
|
||||
destroy: function (driver) {
|
||||
driver.close()
|
||||
driver.quit()
|
||||
destroy: (driver) => {
|
||||
logger.info('Quitting driver')
|
||||
return driver.quit()
|
||||
},
|
||||
validate: (driver) => {
|
||||
return driver.getSession().then(s => {
|
||||
logger.info('Driver session validation checked (id: %s)', s.getId())
|
||||
return true
|
||||
}).catch(err => {
|
||||
this.pool.destroy(driver)
|
||||
logger.debug({ message: err.message }, 'Driver session expired and destroy it')
|
||||
return false
|
||||
})
|
||||
}
|
||||
}, {
|
||||
max: 20, min: 1, evictionRunIntervalMillis: 1000 * 10,
|
||||
acquireTimeoutMillis: 1000 * 5,
|
||||
fifo: false,
|
||||
softIdleTimeoutMillis: 1000 * 5
|
||||
max: 100, min: 1
|
||||
});
|
||||
|
||||
this.pool.on('factoryCreateError', function (err) {
|
||||
logger.error(err.message, 'pool error')
|
||||
logger.error({ message: err.message }, 'pool error')
|
||||
})
|
||||
|
||||
this.pool.on('factoryDestroyError', function (err) {
|
||||
logger.error(err.message, 'pool error')
|
||||
logger.error({ message: err.message }, 'pool error')
|
||||
})
|
||||
|
||||
this.pool.use(async driver => {
|
||||
let session = await driver.getSession()
|
||||
return session && session.getId() ? driver : this.getDriver()
|
||||
}).then(/* a promise that will run after myTask resolves */)
|
||||
this.pool.use(driver => {
|
||||
return driver.getSession().then(s => driver).catch(err => {
|
||||
this.pool.destroy(driver)
|
||||
throw new Error('Driver session expired pool should create new instance')
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
getDriver() {
|
||||
@@ -59,16 +69,12 @@ class SeleniumBrowser {
|
||||
logger.info('URL %s', uri)
|
||||
if (uri.indexOf('://') > 3) {
|
||||
return this.pool.acquire()
|
||||
// return this.getDriver()
|
||||
.then(async driver => {
|
||||
let html = await driver.get(uri)
|
||||
.then(() => driver.findElement(By.css('body')))
|
||||
.then(body => body.getAttribute('innerHTML'))
|
||||
let htmlPromise = this.isCaptchaPage(html) ? this.resolveCaptcha(driver) : this.getHtml(driver, html, params)
|
||||
html = await htmlPromise
|
||||
driver.close()
|
||||
driver.quit()
|
||||
this.pool.destroy(driver)
|
||||
html = await htmlPromise
|
||||
return html
|
||||
})
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user