123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- # 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()
|