# from selenium.webdriver.common.alert import Alert import os import sys import traceback from time import sleep # from collections import deque from threading import Thread from datetime import date import keyboard as kb import pywinctl as gw # import xlsxwriter as xlw from selenium import webdriver from selenium.webdriver import ChromeOptions from selenium.webdriver.common.by import By from selenium.common.exceptions import ( NoSuchElementException, ElementClickInterceptedException, StaleElementReferenceException, TimeoutException, WebDriverException ) import yagmail def pretty_exc(): exc_type, exc_obj, exc_tb = sys.exc_info() for tb in list(traceback.format_exception(exc_type, exc_obj, exc_tb)): print(tb) def accept_cert(): # brave_ready.wait() sleep(3) kb.press_and_release('enter') sleep(1) try: gw.getWindowsWithTitle('Token Logon')[0] sleep(4) kb.write(os.getenv('PKCS11PIN'), 0.05) sleep(1) kb.press_and_release('enter') except Exception: pass # n_headers = ['cod fiscal/cif', 'tip', 'data', 'file', 'descriere'] # dest_book = xlw.Workbook('SPV' + '.xlsm') # dest_book.add_vba_project('./vbaProject.bin') # sheet_ = dest_book.add_worksheet('SPV') # head_format = dest_book.add_format({'bold': True}) # num_format = dest_book.add_format() # num_format.set_num_format('#,##0.00') # xl_row, col = 3, 0 # sheet_.autofilter(xl_row - 1, 0, 100, len(n_headers) - 1) # sheet_.freeze_panes(xl_row, 0) # hcol = 0 # for header in n_headers: # sheet_.write(xl_row - 1, hcol, header, head_format) # hcol += 1 rows = '//*[@id="form:MesajeTable_data"]/tr[{}]' page_btns = '//*[@id="form:MesajeTable_paginator_bottom"]/span[3]/span[{}]' logout_path = '//*[@id="logout_certificat"]/a' # brave_ready = Event() env2 = yagmail.SMTP() subject = 'Raport SPV {}'.format(date.today().strftime('%d.%m.%Y')) all_element_exceptions = ( NoSuchElementException, ElementClickInterceptedException, StaleElementReferenceException, WebDriverException, TimeoutException ) chrome_options = ChromeOptions() chrome_options.add_argument('--disable-dev-shm-usage') chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-gpu') chrome_options.add_experimental_option('excludeSwitches', ['enable-automation']) user_data_dir = os.path.expanduser('~') chrome_options.add_argument(f'user-data-dir={user_data_dir}/__anaf__') chrome_options.binary_location = 'C:/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe' m_url = 'https://www.anaf.ro/auth_status.html' m_url2 = 'https://www.anaf.ro/anaf/myinternet/SPV/mesaje' driver = webdriver.Chrome(options=chrome_options) thread = Thread(target=accept_cert, args=()) thread.start() # driver.switch_to.window(driver.current_window_handle) driver.get(m_url) try: driver.switch_to.default_content() except TimeoutException: pass # t = 210 try: driver.get(m_url2) # driver.switch_to.default_content() print(f'connecting to {m_url2}') try: iframe = driver.find_elements(By.TAG_NAME, 'iframe')[0]; sleep(1) driver.switch_to.frame(iframe); sleep(1) except IndexError: pretty_exc() messages = [] filtered_messages = [] banes = {'RASPUNS SOLICITARE', 'recipisa', 'EXTRAS DE CONT', '5996564', '16286198', '12760778', '31596729', '250678', '2897043'} for page in range(2, 6): try: for table_nr in range(1, 21): row = driver.find_element(By.XPATH, rows.format(table_nr)) # f'//*[@id="form:MesajeTable_data"]/tr[{table_nr}]' messages.append(row.text) except all_element_exceptions as exc_: print(str(exc_)) for message in messages: if all(bane not in message for bane in banes) and \ message not in filtered_messages: filtered_messages.append(message) try: n_page = driver.find_element(By.XPATH, page_btns.format(page)) # f'//*[@id="form:MesajeTable_paginator_bottom"]/span[3]/span[{page}]' sleep(1) n_page.click() sleep(1) except all_element_exceptions as exc_: print(str(exc_)) print(filtered_messages) driver.switch_to.default_content() logout = driver.find_element(By.XPATH, logout_path) # '//*[@id="logout_certificat"]/a' sleep(1) logout.click() sleep(1) driver.close() env2.send(to='deeejas@yandex.com', subject=subject, contents=filtered_messages) # for message in filtered_messages: # sheet_.write_row(row, col, message) # xl_row += 1 # dest_book.close() except all_element_exceptions: pretty_exc()