diff --git a/src/component/CaptchaComp.js b/src/component/CaptchaComp.js index dcc1b0b..e4b7623 100644 --- a/src/component/CaptchaComp.js +++ b/src/component/CaptchaComp.js @@ -102,13 +102,16 @@ class CaptchaComp { return res } - resolveCaptcha(driver) { + resolveCaptcha(driver, pool) { return this.api.working ? new Promise(r => r(new Error('Resovling Catpcha'))) : this.requestResolve(driver) .then(id => this.getAnswer(id)) .then(res => { setTimeout(() => { this.api.working = false }, 1000 * 5 * 2) logger.info({ result: res.request }, 'Calling captchaCallback') return driver.executeScript('captchaCallback("' + res.request + '")').then(() => this.sleep(1000 * 5)) + }).catch(err => { + logger.error({ message: err.message }, 'Resolve captcha failed') + pool.destroy(driver) }) } } diff --git a/src/component/SeleniumBrowser.js b/src/component/SeleniumBrowser.js index 56b0776..909e704 100644 --- a/src/component/SeleniumBrowser.js +++ b/src/component/SeleniumBrowser.js @@ -19,7 +19,7 @@ class SeleniumBrowser { let html = await driver.get(uri) .then(() => driver.findElement(By.css('body'))) .then(body => body.getAttribute('innerHTML')) - let p = captcha.isCaptchaPage(html) ? captcha.resolveCaptcha(driver) : this.getHtml(driver, html, params) + let p = captcha.isCaptchaPage(html) ? captcha.resolveCaptcha(driver, this.pool) : this.getHtml(driver, html, params) html = await p if (this.pool.isBorrowedResource(driver)) this.pool.release(driver) return html