update: bump 'common' version 0.1.20

This commit is contained in:
2026-08-11 21:48:03 +08:00
parent 13a0c02ed5
commit 98a10b5597
2 changed files with 27 additions and 27 deletions
+27 -27
View File
@@ -36,15 +36,15 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
unique = identity() unique = identity()
parameters = vars(args) parameters = vars(args)
http = PoolManager() http = PoolManager()
sp = ServiceProvider.default() sp = ServiceProvider(ServiceProvider.Options())
try: try:
sp.set('context', lambda: { 'parameters': parameters }) sp.set('context', lambda: { 'parameters': parameters })
driver.get(sp.run()) driver.get(sp.run())
except Exception as e: except Exception as e:
logger.critical('Unable to load starup page', exc_info=e) logger.critical('Unable to load starup page', exc_info=e)
return 2 return 2
try: try:
driver.switch_to.new_window('tab') driver.switch_to.new_window('tab')
driver.set_page_load_timeout(parameters['timeout']) driver.set_page_load_timeout(parameters['timeout'])
@@ -52,14 +52,14 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
except TimeoutException: except TimeoutException:
logger.warning('Timeout') logger.warning('Timeout')
driver.execute_script("window.stop();") driver.execute_script("window.stop();")
try: try:
setup(driver, parameters) setup(driver, parameters)
until(lambda x: 'loginProgress' in x.find_element(By.TAG_NAME, "body").get_attribute('class'), watch=False) until(lambda x: 'loginProgress' in x.find_element(By.TAG_NAME, "body").get_attribute('class'), watch=False)
account = str(parameters['account']) account = str(parameters['account'])
password = str(parameters['password']) password = str(parameters['password'])
logger.info('Logging in as %s (%s)', account.split('@', 1).pop(0).capitalize(), account) logger.info('Logging in as %s (%s)', account.split('@', 1).pop(0).capitalize(), account)
locate("input.account").send_keys(account) locate("input.account").send_keys(account)
locate("input#password").send_keys(password) locate("input#password").send_keys(password)
click("input.agree-checkbox") click("input.agree-checkbox")
@@ -68,7 +68,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
except Exception as e: except Exception as e:
logger.critical('Unable to login to %s', parameters['url'], exc_info=e) logger.critical('Unable to login to %s', parameters['url'], exc_info=e)
return 3 return 3
while True: while True:
try: try:
locate("#container", wait=False) locate("#container", wait=False)
@@ -78,7 +78,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
break break
except: except:
sleep(3) sleep(3)
while True: while True:
try: try:
if not (buttons := driver.find_elements(By.CSS_SELECTOR, ".export-actions .okki-btn-primary")): raise ValueError() if not (buttons := driver.find_elements(By.CSS_SELECTOR, ".export-actions .okki-btn-primary")): raise ValueError()
@@ -86,7 +86,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
break break
except: except:
sleep(1) sleep(1)
try: try:
verified = False verified = False
button = locate(".filter-actions .okki-btn-primary") button = locate(".filter-actions .okki-btn-primary")
@@ -96,7 +96,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
except Exception as e: except Exception as e:
logger.critical("Error while setting up button listeners", exc_info=e) logger.critical("Error while setting up button listeners", exc_info=e)
return 4 return 4
while True: while True:
try: try:
for index in count(0): for index in count(0):
@@ -111,7 +111,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
except: except:
sleep(1) sleep(1)
continue continue
if not verified: if not verified:
try: try:
locate(".safe-verify-dialog:not([style*='display: none']) .mm-modal-content .mm-modal-body input").send_keys(parameters['password']) locate(".safe-verify-dialog:not([style*='display: none']) .mm-modal-content .mm-modal-body input").send_keys(parameters['password'])
@@ -119,7 +119,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
verified = True verified = True
except: except:
pass pass
while True: while True:
try: try:
sleep(1) sleep(1)
@@ -128,12 +128,12 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
if (filename := cell.text) != '--': break if (filename := cell.text) != '--': break
except: except:
pass pass
try: try:
logger.info('New task: %s', filename) logger.info('New task: %s', filename)
download = locate(".business-export-wrap section:nth-child(3) table tbody tr:first-child td:last-child a") download = locate(".business-export-wrap section:nth-child(3) table tbody tr:first-child td:last-child a")
href = download.get_attribute('href') href = download.get_attribute('href')
response = http.request("GET", href) response = http.request("GET", href)
text = response.data.decode(parameters['encoding']).splitlines() text = response.data.decode(parameters['encoding']).splitlines()
data = csv.reader(text) data = csv.reader(text)
@@ -141,7 +141,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
except Exception as e: except Exception as e:
logger.critical('Unable to load input data', exc_info=e) logger.critical('Unable to load input data', exc_info=e)
return 6 return 6
try: try:
file = Path('template.xlsx').resolve() file = Path('template.xlsx').resolve()
template = openpyxl.load_workbook(file) template = openpyxl.load_workbook(file)
@@ -151,42 +151,42 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
except Exception as e: except Exception as e:
logger.critical('Unable to load template excel', exc_info=e) logger.critical('Unable to load template excel', exc_info=e)
return 7 return 7
def preprocess(data: str): def preprocess(data: str):
try: return float(data) try: return float(data)
except ValueError: pass except ValueError: pass
try: return int(data) try: return int(data)
except ValueError: pass except ValueError: pass
return data.lstrip("'") return data.lstrip("'")
for row in data: for row in data:
for index, name in enumerate(header): for index, name in enumerate(header):
names = template.defined_names names = template.defined_names
if name not in names: continue if name not in names: continue
for _, coord in names[name].destinations: for _, coord in names[name].destinations:
value = preprocess(row[index]) value = preprocess(row[index])
source[coord] = value source[coord] = value
sheet = template.copy_worksheet(source) sheet = template.copy_worksheet(source)
sheet.title = "COPY" sheet.title = "COPY"
logger.debug('%s', sheet.title) logger.debug('%s', sheet.title)
if not len(template.worksheets) > 1: if not len(template.worksheets) > 1:
logger.error('Invalid input') logger.error('Invalid input')
continue continue
template.remove(source) template.remove(source)
template.save(output) template.save(output)
data = base64.b64encode(output.getbuffer()) data = base64.b64encode(output.getbuffer())
text = data.decode('ascii') text = data.decode('ascii')
mime = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' mime = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
href = f"data:{mime};base64,{text}" href = f"data:{mime};base64,{text}"
filename = filename.replace('.csv', '.xlsx') filename = filename.replace('.csv', '.xlsx')
driver.switch_to.new_window('tab') driver.switch_to.new_window('tab')
driver.execute_script( driver.execute_script(
""" """
@@ -198,7 +198,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
filename, filename,
href href
) )
if parameters['open']: if parameters['open']:
try: try:
path = Path(parameters['directory']) / filename path = Path(parameters['directory']) / filename
@@ -206,7 +206,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
Popen(['start', str(path)], shell=True) Popen(['start', str(path)], shell=True)
except Exception as e: except Exception as e:
logger.warning('Unable to open exported excel file at %s', str(path), exc_info=e) logger.warning('Unable to open exported excel file at %s', str(path), exc_info=e)
driver.close() driver.close()
driver.switch_to.window(driver.window_handles[1]) driver.switch_to.window(driver.window_handles[1])
logger.info('Done') logger.info('Done')
@@ -217,7 +217,7 @@ if __name__ == '__main__':
logger = logging.getLogger() logger = logging.getLogger()
level = logging.getLevelNamesMapping().get(args.log_level, 'INFO') level = logging.getLevelNamesMapping().get(args.log_level, 'INFO')
logger.setLevel(level) logger.setLevel(level)
opts = Options() opts = Options()
opts.enable_downloads = True opts.enable_downloads = True
opts.add_argument('--deny-permission-prompts') opts.add_argument('--deny-permission-prompts')
BIN
View File
Binary file not shown.