From 3b9af6e57e70ad224dd014c65756f12eceb0b7ee Mon Sep 17 00:00:00 2001 From: break27 Date: Fri, 22 May 2026 15:51:49 +0800 Subject: [PATCH] update: bump 'common' version to 0.1.15 --- index.html | 36 ++++++++++++++++++------------------ main.py | 42 +++++++++++++++++++----------------------- requirements.txt | Bin 1018 -> 1018 bytes 3 files changed, 37 insertions(+), 41 deletions(-) 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 ce78bd319ec3449d3cf5ff27f3410a1f5a675762..8d75d2ab3cf67235e8243615c6e95564c874485a 100644 GIT binary patch delta 89 zcmeyx{)>IWH{TQn0|pZYbA~hq3kFjLLk44pL?GXi!HgjlC<2mA0m>x<*(N}dM1~}w b8gn3R3FKPHuN8QmBs55;pX@A?DU@D6