""" Ini nanti periodik """ import os import time import selenium from dotenv import load_dotenv from selenium import webdriver from selenium.common import TimeoutException from selenium.webdriver import ActionChains from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait from pyvirtualdisplay import Display from util import setupLogger load_dotenv() logger = setupLogger() class Browser: def __init__(self, url): self.display = Display(visible=False, size=(800, 600)) self.display.start() op = webdriver.ChromeOptions() op.add_experimental_option('prefs', { 'download.default_directory': os.getenv('DOWNLOAD_PATH') }) op.add_argument('--headless') op.add_argument("--no-sandbox") op.add_argument("--disable-dev-shm-usage") self.driver = webdriver.Chrome(options=op) try: self.driver.get(url) self.connectionSuccess = True except selenium.common.exceptions.WebDriverException: self.connectionSuccess = False logger.error(f"Selenium couldn't connect to {url}") def getDriver(self): return self.driver def close(self): self.driver.quit() self.display.stop() def downloadCsv(): downloadSuccess = False browser = Browser(os.getenv('URL')) if not browser.connectionSuccess: return False driver = browser.getDriver() action = ActionChains(driver) try: reportArea = WebDriverWait(driver, 10).until( EC.visibility_of_element_located((os.getenv('REPORT_AREA_SELECTOR_TYPE'), os.getenv('REPORT_AREA'))) ) action.move_to_element(reportArea).perform() action.context_click(reportArea).perform() exportButton = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((os.getenv('EXPORT_BUTTON_SELECTOR_TYPE'), os.getenv('EXPORT_BUTTON'))) ) exportButton.click() downloadButton = WebDriverWait(driver, 10).until( EC.element_to_be_clickable( (os.getenv('DOWNLOAD_BUTTON_SELECTOR_TYPE'), os.getenv('DOWNLOAD_BUTTON'))) ) downloadButton.click() time.sleep(5) logger.info("REPORT FILE DOWNLOADED") downloadSuccess = True except TimeoutException: logger.error("Timed out while downloading report") downloadSuccess = False finally: browser.close() return downloadSuccess if __name__ == '__main__': downloadCsv()