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 bf3010d..2a5b60b 100644 Binary files a/requirements.txt and b/requirements.txt differ