diff --git a/index.html b/index.html
index fabe4d6..1c35ac8 100644
--- a/index.html
+++ b/index.html
@@ -4,26 +4,26 @@
-
@@ -45,4 +45,4 @@ textarea {
textarea:focus {
outline: none;
}
-
\ No newline at end of file
+
diff --git a/main.py b/main.py
index 6ab38e5..f98ef3d 100644
--- a/main.py
+++ b/main.py
@@ -9,7 +9,7 @@ from selenium.webdriver.chrome.webdriver import WebDriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
-from common import jsonrpc2
+from common.jsonrpc2 import ServiceProvider
from common.utils import *
from io import BytesIO
@@ -33,28 +33,30 @@ WEBURL = "https://crm.xiaoman.cn/business/export"
APIURL = "https://crm.xiaoman.cn/api/opportunityRead/export"
def main(driver: WebDriver, logger = logging.getLogger('main')):
+ parameters = vars(args)
+ http = PoolManager()
+ sp = ServiceProvider.default()
+
try:
- http = PoolManager()
- parameters = vars(args)
- driver.get(str(Path('index.html').resolve()))
- driver.execute_script(jsonrpc2.prelude(), parameters)
+ sp.set('context', lambda: { 'parameters': parameters })
+ driver.get(sp.run())
except Exception as e:
logger.critical('Unable to load starup page', exc_info=e)
return 2
try:
driver.switch_to.new_window('tab')
- driver.set_page_load_timeout(parameters.get('timeout'))
+ driver.set_page_load_timeout(parameters['timeout'])
driver.get(WEBURL)
except TimeoutException:
logger.warning('Timeout')
driver.execute_script("window.stop();")
try:
- setup(driver, parameters.get('attempts'), parameters.get('timeout'), 0)
+ setup(driver, parameters)
until(lambda x: 'loginProgress' in x.find_element(By.TAG_NAME, "body").get_attribute('class'), watch=False)
- account = str(parameters.get('account'))
- password = str(parameters.get('password'))
+ account = str(parameters['account'])
+ password = str(parameters['password'])
logger.info('Logging in as %s (%s)', account.split('@', 1).pop(0).capitalize(), account)
locate("input.account").send_keys(account)
@@ -62,7 +64,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
click("input.agree-checkbox")
click("button.login-btn")
except Exception as e:
- logger.critical('Unable to login to %s', parameters.get('url'), exc_info=e)
+ logger.critical('Unable to login to %s', parameters['url'], exc_info=e)
return 3
logger.info('Waiting for authentication to complete...')
@@ -101,8 +103,8 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
continue
try:
- locate(".safe-verify-dialog:not([style*='display: none']) .mm-modal-content .mm-modal-body input", wait=False).send_keys(parameters.get('password'))
- click(".mm-modal-footer button.okki-btn-primary", wait=False)
+ locate(".safe-verify-dialog:not([style*='display: none']) .mm-modal-content .mm-modal-body input", wait=False).send_keys(parameters['password'])
+ click(".mm-modal-footer button.okki-btn-primary")
except:
pass
@@ -121,7 +123,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
href = download.get_attribute('href')
response = http.request("GET", href)
- text = response.data.decode(parameters.get('encoding')).splitlines()
+ text = response.data.decode(parameters['encoding']).splitlines()
data = csv.reader(text)
logger.info('Read %d line(s) total', len(text))
except Exception as e:
@@ -185,9 +187,9 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
href
)
- if parameters.get('open'):
+ if parameters['open']:
try:
- path = Path.home() / 'Downloads' / filename
+ path = Path(parameters['directory']) / filename
until(lambda _: path.exists(), watch=False)
Popen(['start', str(path)], shell=True)
except Exception as e:
@@ -204,20 +206,14 @@ if __name__ == '__main__':
level = logging.getLevelNamesMapping().get(args.log_level, 'INFO')
logger.setLevel(level)
- logger.info('Initializing...')
- history = jsonrpc2.History()
- logger.addHandler(history)
- opts = jsonrpc2.Options()
- jsonrpc2.define('history', lambda: history.truncate())
- jsonrpc2.run(opts)
-
- logger.info('Creating automation instance')
opts = Options()
opts.enable_downloads = True
opts.add_argument('--deny-permission-prompts')
opts.add_experimental_option('prefs', { 'download.default_directory': args.directory })
driver = WebDriver(options=opts)
status = main(driver)
+ except KeyboardInterrupt:
+ status = 0
except Exception as e:
logger.critical('Fatal error', exc_info=e)
status = 1
diff --git a/requirements.txt b/requirements.txt
index ce78bd3..8d75d2a 100644
Binary files a/requirements.txt and b/requirements.txt differ