From f773dce315a93158ac38034d285b32165c21e5b1 Mon Sep 17 00:00:00 2001 From: break27 Date: Thu, 25 Jun 2026 14:11:42 +0800 Subject: [PATCH] fix: setting up button listeners --- main.py | 40 ++++++++++++++++++++++++++-------------- requirements.txt | Bin 1018 -> 1018 bytes 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/main.py b/main.py index 1f150ee..adc8e78 100644 --- a/main.py +++ b/main.py @@ -33,6 +33,7 @@ WEBURL = "https://crm.xiaoman.cn/business/export" APIURL = "https://crm.xiaoman.cn/api/opportunityRead/export" def main(driver: WebDriver, logger = logging.getLogger('main')): + identity = short() parameters = vars(args) http = PoolManager() sp = ServiceProvider.default() @@ -63,11 +64,11 @@ def main(driver: WebDriver, logger = logging.getLogger('main')): locate("input#password").send_keys(password) click("input.agree-checkbox") click("button.login-btn") + logger.info('Waiting for authentication to complete...') except Exception as e: logger.critical('Unable to login to %s', parameters['url'], exc_info=e) return 3 - logger.info('Waiting for authentication to complete...') while True: try: locate("#container", wait=False) @@ -80,13 +81,22 @@ def main(driver: WebDriver, logger = logging.getLogger('main')): while True: try: - if buttons := driver.find_elements(By.CSS_SELECTOR, ".export-actions .okki-btn-primary"): - identity = 'EXPORT' - for button in buttons: driver.execute_script("arguments[0].addEventListener('click', () => arguments[0].parentElement.setAttribute(arguments[1], '1'));", button, identity) - break - finally: + if not (buttons := driver.find_elements(By.CSS_SELECTOR, ".export-actions .okki-btn-primary")): raise ValueError() + for button in buttons: driver.execute_script("arguments[0].addEventListener('click', () => arguments[0].parentElement.setAttribute(arguments[1], '1'));", button, identity) + break + except: sleep(1) + try: + verified = False + button = locate(".filter-actions .okki-btn-primary") + driver.execute_script("window.__%s__ = () => arguments[0].click();" % identity, buttons[1]) + driver.execute_script("arguments[0].addEventListener('click', __%s__);" % identity, button) + driver.execute_script("__%s__();" % identity) + except Exception as e: + logger.critical("Error while setting up button listeners", exc_info=e) + return 4 + while True: try: for index in count(0): @@ -95,18 +105,20 @@ def main(driver: WebDriver, logger = logging.getLogger('main')): raise ValueError() except StaleElementReferenceException: logger.critical('Error while listening to button events') - return 4 + return 5 except ValueError: pass except: sleep(1) continue - try: - 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 + if not verified: + try: + locate(".safe-verify-dialog:not([style*='display: none']) .mm-modal-content .mm-modal-body input").send_keys(parameters['password']) + click(".mm-modal-footer button.okki-btn-primary", wait=False) + verified = True + except: + pass while True: try: @@ -128,14 +140,14 @@ def main(driver: WebDriver, logger = logging.getLogger('main')): logger.info('Read %d line(s) total', len(text)) except Exception as e: logger.critical('Unable to load input data', exc_info=e) - return 5 + return 6 try: file = Path('template.xlsx').resolve() template = openpyxl.load_workbook(file) except Exception as e: logger.critical('Unable to load template excel', exc_info=e) - return 6 + return 7 header = next(data, None) source = template.active diff --git a/requirements.txt b/requirements.txt index bf3010df480c6d2507f9c397f712e76ec3b46067..2a5b60b759af4b28b2485f2f888dcf306086afc7 100644 GIT binary patch delta 91 zcmeyx{)>IWH-A$GV+Iojb0D-}NM(Rl8FqK3~3AoK(;Yh%or?U0F+Gy^OG4; afG`oLBM~T;3{;&66gOrt-0aG@l?ebH@em#W delta 91 zcmeyx{)>IWH~%ySBL*`dwqQtMFknaovQik#87zU=1c+0Ca^?)iU~I-<%8&%)TL7UE bP|OsF4H(jZyi|r{Aj=R)8*O%F+{y$19zzeB