anaf_spv_messages.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. # from selenium.webdriver.common.alert import Alert
  2. import os
  3. import sys
  4. import traceback
  5. from time import sleep
  6. # from collections import deque
  7. from threading import Thread
  8. from datetime import date
  9. import keyboard as kb
  10. import pywinctl as gw
  11. # import xlsxwriter as xlw
  12. from selenium import webdriver
  13. from selenium.webdriver import ChromeOptions
  14. from selenium.webdriver.common.by import By
  15. from selenium.common.exceptions import (
  16. NoSuchElementException,
  17. ElementClickInterceptedException,
  18. StaleElementReferenceException,
  19. TimeoutException,
  20. WebDriverException
  21. )
  22. import yagmail
  23. def pretty_exc():
  24. exc_type, exc_obj, exc_tb = sys.exc_info()
  25. for tb in list(traceback.format_exception(exc_type, exc_obj, exc_tb)):
  26. print(tb)
  27. def accept_cert():
  28. # brave_ready.wait()
  29. sleep(3)
  30. kb.press_and_release('enter')
  31. sleep(1)
  32. try:
  33. gw.getWindowsWithTitle('Token Logon')[0]
  34. sleep(4)
  35. kb.write(os.getenv('PKCS11PIN'), 0.05)
  36. sleep(1)
  37. kb.press_and_release('enter')
  38. except Exception:
  39. pass
  40. # n_headers = ['cod fiscal/cif', 'tip', 'data', 'file', 'descriere']
  41. # dest_book = xlw.Workbook('SPV' + '.xlsm')
  42. # dest_book.add_vba_project('./vbaProject.bin')
  43. # sheet_ = dest_book.add_worksheet('SPV')
  44. # head_format = dest_book.add_format({'bold': True})
  45. # num_format = dest_book.add_format()
  46. # num_format.set_num_format('#,##0.00')
  47. # xl_row, col = 3, 0
  48. # sheet_.autofilter(xl_row - 1, 0, 100, len(n_headers) - 1)
  49. # sheet_.freeze_panes(xl_row, 0)
  50. # hcol = 0
  51. # for header in n_headers:
  52. # sheet_.write(xl_row - 1, hcol, header, head_format)
  53. # hcol += 1
  54. rows = '//*[@id="form:MesajeTable_data"]/tr[{}]'
  55. page_btns = '//*[@id="form:MesajeTable_paginator_bottom"]/span[3]/span[{}]'
  56. logout_path = '//*[@id="logout_certificat"]/a'
  57. # brave_ready = Event()
  58. env2 = yagmail.SMTP()
  59. subject = 'Raport SPV {}'.format(date.today().strftime('%d.%m.%Y'))
  60. all_element_exceptions = (
  61. NoSuchElementException,
  62. ElementClickInterceptedException,
  63. StaleElementReferenceException,
  64. WebDriverException, TimeoutException
  65. )
  66. chrome_options = ChromeOptions()
  67. chrome_options.add_argument('--disable-dev-shm-usage')
  68. chrome_options.add_argument('--no-sandbox')
  69. chrome_options.add_argument('--disable-gpu')
  70. chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])
  71. user_data_dir = os.path.expanduser('~')
  72. chrome_options.add_argument(f'user-data-dir={user_data_dir}/__anaf__')
  73. chrome_options.binary_location = 'C:/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe'
  74. m_url = 'https://www.anaf.ro/auth_status.html'
  75. m_url2 = 'https://www.anaf.ro/anaf/myinternet/SPV/mesaje'
  76. driver = webdriver.Chrome(options=chrome_options)
  77. thread = Thread(target=accept_cert, args=())
  78. thread.start()
  79. # driver.switch_to.window(driver.current_window_handle)
  80. driver.get(m_url)
  81. try:
  82. driver.switch_to.default_content()
  83. except TimeoutException:
  84. pass
  85. # t = 210
  86. try:
  87. driver.get(m_url2)
  88. # driver.switch_to.default_content()
  89. print(f'connecting to {m_url2}')
  90. try:
  91. iframe = driver.find_elements(By.TAG_NAME, 'iframe')[0]; sleep(1)
  92. driver.switch_to.frame(iframe); sleep(1)
  93. except IndexError:
  94. pretty_exc()
  95. messages = []
  96. filtered_messages = []
  97. banes = {'RASPUNS SOLICITARE', 'recipisa', 'EXTRAS DE CONT',
  98. '5996564', '16286198', '12760778', '31596729', '250678', '2897043'}
  99. for page in range(2, 6):
  100. try:
  101. for table_nr in range(1, 21):
  102. row = driver.find_element(By.XPATH, rows.format(table_nr)) # f'//*[@id="form:MesajeTable_data"]/tr[{table_nr}]'
  103. messages.append(row.text)
  104. except all_element_exceptions as exc_:
  105. print(str(exc_))
  106. for message in messages:
  107. if all(bane not in message for bane in banes) and \
  108. message not in filtered_messages:
  109. filtered_messages.append(message)
  110. try:
  111. n_page = driver.find_element(By.XPATH, page_btns.format(page)) # f'//*[@id="form:MesajeTable_paginator_bottom"]/span[3]/span[{page}]'
  112. sleep(1)
  113. n_page.click()
  114. sleep(1)
  115. except all_element_exceptions as exc_:
  116. print(str(exc_))
  117. print(filtered_messages)
  118. driver.switch_to.default_content()
  119. logout = driver.find_element(By.XPATH, logout_path) # '//*[@id="logout_certificat"]/a'
  120. sleep(1)
  121. logout.click()
  122. sleep(1)
  123. driver.close()
  124. env2.send(to='deeejas@yandex.com', subject=subject, contents=filtered_messages)
  125. # for message in filtered_messages:
  126. # sheet_.write_row(row, col, message)
  127. # xl_row += 1
  128. # dest_book.close()
  129. except all_element_exceptions:
  130. pretty_exc()