From 6e46b8faf59927ee0473f7b7ded6b1612be0bd4a Mon Sep 17 00:00:00 2001 From: break27 Date: Wed, 1 Apr 2026 15:12:22 +0800 Subject: [PATCH] fix: crash --- index.html | 8 +++++++- main.py | 39 +++++++++++++++++++++++++++++++-------- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/index.html b/index.html index 28ec225..486ea89 100644 --- a/index.html +++ b/index.html @@ -1,5 +1,5 @@ -Opportunity Exporter +Opportunity Export @@ -9,6 +9,12 @@ function main(url, parameters) { let ws = new WebSocket(url); let messages = document.querySelector("#messages"); + let account = new String(parameters['account']); + let name = account.split('@', 1).pop() ?? 'unknown'; + + name = name.charAt(0).toLocaleUpperCase() + name.slice(1); + document.title = `${name} (${account})`; + ws.addEventListener('message', (e) => { object = JSON.parse(e.data); lines = Array.from(object.result); diff --git a/main.py b/main.py index ea45cd8..178572a 100644 --- a/main.py +++ b/main.py @@ -81,9 +81,28 @@ class History(logging.Handler): self.records.clear() return copy +class ConnectionContext: + def __enter__(self): + self.healthcheck() + return self + + def __exit__(self, exc_type, exc, tb): + self.healthcheck() + return True + + class Error(Exception): + pass + + @classmethod + def healthcheck(cls): + if connection.closed is not None: + raise cls.Error() + def main(driver: WebDriver, logger = logging.getLogger('main')): try: http = PoolManager() + context = ConnectionContext() + driver.get(str(Path('index.html').resolve())) endpoint = server.listeners[0] parameters = vars(args) @@ -109,9 +128,10 @@ def main(driver: WebDriver, logger = logging.getLogger('main')): return True def sleep(seconds: float): - try: WebDriverWait(driver, seconds, seconds).until(lambda _: False) - except: pass - return True + with context: + try: WebDriverWait(driver, seconds, seconds).until(lambda _: False) + except: pass + return True def locate(selector, wait=True, condition=EC.visibility_of_element_located) -> WebElement: while True: @@ -154,8 +174,12 @@ def main(driver: WebDriver, logger = logging.getLogger('main')): try: until(lambda x: 'loginProgress' in x.find_element(By.TAG_NAME, "body").get_attribute('class'), watch=False) - locate("input.account").send_keys(parameters.get('account')) - locate("input#password").send_keys(parameters.get('password')) + account = str(parameters.get('account')) + password = str(parameters.get('password')) + logger.info('Logging in as %s (%s)', account.split('@', 1).pop(0).capitalize(), account) + + locate("input.account").send_keys(account) + locate("input#password").send_keys(password) click("input.agree-checkbox") click("button.login-btn") except Exception as e: @@ -165,14 +189,14 @@ def main(driver: WebDriver, logger = logging.getLogger('main')): logger.info('Waiting for authentication to complete...') while True: try: - locate("#container", False) + locate("#container", wait=False) logger.info('Done') break except: sleep(3) ready = False - sidebar = locate(".new-layout-left", False) + sidebar = locate(".new-layout-left") driver.execute_script("arguments[0].remove();", sidebar) def handle(request: NetworkRequest): @@ -288,7 +312,6 @@ async def handler(request: ws.WebSocketRequest, logger = logging.getLogger('webs if connection is None: connection = websocket - logger.info('Connection established') else: await websocket.aclose(code=1000, reason="Non-singular connection prohibited") return