From 586b0f15c6e69955e8e0d19dd43d5a3615e8ad24 Mon Sep 17 00:00:00 2001 From: brow3c Date: Sat, 15 May 2021 23:53:56 +0900 Subject: [PATCH] asdfsdf --- src/component/SeleniumBrowser.js | 5 +++ src/service/HeadlessService.js | 2 +- src/service/NavigateService.js | 60 ++++++++++++++++++++++++++++++++ src/service/PoolingService.js | 16 ++++++--- 4 files changed, 77 insertions(+), 6 deletions(-) create mode 100644 src/service/NavigateService.js diff --git a/src/component/SeleniumBrowser.js b/src/component/SeleniumBrowser.js index 3a494fd..989a403 100644 --- a/src/component/SeleniumBrowser.js +++ b/src/component/SeleniumBrowser.js @@ -2,6 +2,7 @@ const logger = require("logops") , { By, until } = require('selenium-webdriver') , captcha = require('../component/CaptchaComp') , poolingService = require('../service/PoolingService') + , navigateService = require('../service/NavigateService') class SeleniumBrowser { @@ -10,6 +11,10 @@ class SeleniumBrowser { this.pool = poolingService.pool } + navigate(params) { + return navigateService.rowing(params) + } + async request(params) { let uri = params.uri logger.info('URL %s', uri) diff --git a/src/service/HeadlessService.js b/src/service/HeadlessService.js index 4d8f092..d34f875 100644 --- a/src/service/HeadlessService.js +++ b/src/service/HeadlessService.js @@ -9,7 +9,7 @@ class HeadlessService { } get(params) { - return browser.request(params) + return params.hasOwnProperty('sessionId') ? browser.navigate(params) : browser.request(params) } close() { diff --git a/src/service/NavigateService.js b/src/service/NavigateService.js new file mode 100644 index 0000000..ccacd9a --- /dev/null +++ b/src/service/NavigateService.js @@ -0,0 +1,60 @@ +const logger = require("logops") + , { Builder, Capabilities, WebDriver, By } = require('selenium-webdriver') + , _http = require('selenium-webdriver/http') + , { Options } = require('selenium-webdriver/chrome'); + + +class NavigateService { + constructor() { + this.config = { + browser: 'chrome', + hub: 'http://spiduler-chrome:4444/wd/hub', + browserArgs: ['--no-sandbox', '--headless', '--disable-dev-shm-usage'] + } + } + + rowing(params) { + return this[params.anchor](params) + } + + login(params) { + this._getDriver(params.sessionId).then(driver => { + driver.get(params.uri).then(() => { + let username = driver.findElement(By.name(param.name.username)) + let password = driver.findElement(By.name(param.name.password)) + // let username = driver.findElement(By.xpath(param.xpath.username)) + // let password = driver.findElement(By.xpath(param.xpath.password)) + let submit = driver.findElement(By.xpath(param.xpath.submit)) + username.sendKeys(params.key.username) + password.sendKeys(params.key.password) + return submit.click() + //*[@id="container_sub"]/div[2]/table/tbody/tr/td[1]/table/tbody/tr[2]/td/table/tbody/tr[1]/td[3]/input + }).then(signed => { + return { currentUrl: driver.getCurrentUrl(), sessionId: driver.getSession() } + }) + }) + } + + _getDriver(params) { + return params.sessionId ? this.getDriverExists(params) : this.getNewDriver() + } + + _getDriverBySessionId(params) { + return new WebDriver(params.sessionId, new _http.Executor(Promise.resolve(this.config.hub) + .then(url => new _http.HttpClient(url, null, null)))) + } + + _getNewDriver() { + let capabilities = Capabilities.chrome() + let opts = new Options; + opts.addArguments(this.config.browserArgs) + return new Builder() + .usingServer(this.config.hub) + .withCapabilities(capabilities) + .forBrowser(this.config.browser) + .setChromeOptions(opts) + .build(); + } +} + +module.exports = new NavigateService diff --git a/src/service/PoolingService.js b/src/service/PoolingService.js index 1f68b05..1e9103d 100644 --- a/src/service/PoolingService.js +++ b/src/service/PoolingService.js @@ -1,6 +1,7 @@ const logger = require("logops") , config = require('../../config') - , { Builder, Capabilities } = require('selenium-webdriver') + , { Builder, Capabilities, WebDriver } = require('selenium-webdriver') + , _http = require('selenium-webdriver/http') , pool = require('generic-pool') , { Options } = require('selenium-webdriver/chrome'); @@ -11,7 +12,7 @@ class PoolingService { browser: 'chrome', browserArgs: ['--no-sandbox', '--headless', '--disable-dev-shm-usage', '--proxy-server=spiduler-tor:8118'] } - this.pool = this.createPool() + this.pool = this.createPool() } acquire() { @@ -25,11 +26,11 @@ class PoolingService { destroy: (driver) => this.destroy(driver), validate: (driver) => this.validate(driver) }, this.config.pool); - genericPool.on("factoryCreateError", function (err) { - logger.debug({reason: err.message}, 'factoryCreateError'); + genericPool.on("factoryCreateError", function (err) { + logger.debug({ reason: err.message }, 'factoryCreateError'); }); genericPool.on("factoryDestroyError", function (err) { - logger.debug({reason: err.message}, 'factoryDestroyError'); + logger.debug({ reason: err.message }, 'factoryDestroyError'); }); return genericPool } @@ -57,6 +58,11 @@ class PoolingService { }) } + getDriverBySessionId(sessionId) { + new WebDriver(sessionId, new _http.Executor(Promise.resolve(url) + .then(url => new _http.HttpClient(url, null, null)))) + } + getDriver() { let opts = new Options; let capabilities = Capabilities.chrome()