diff options
author | Rosyid Haryadi <rosyid_haryadi@protonmail.com> | 2024-07-26 20:47:47 +0700 |
---|---|---|
committer | Rosyid Haryadi <rosyid_haryadi@protonmail.com> | 2024-07-26 20:47:47 +0700 |
commit | ca16de589479995a9ceb9874d9dc8e6a043ac2bd (patch) | |
tree | 76793a72d4bf685a54255d29d694517c532eba49 |
init
-rw-r--r-- | .env.template | 8 | ||||
-rw-r--r-- | .idea/.gitignore | 8 | ||||
-rw-r--r-- | .idea/inspectionProfiles/Project_Default.xml | 50 | ||||
-rw-r--r-- | .idea/inspectionProfiles/profiles_settings.xml | 6 | ||||
-rw-r--r-- | .idea/misc.xml | 7 | ||||
-rw-r--r-- | .idea/modules.xml | 8 | ||||
-rw-r--r-- | .idea/task-watcher.iml | 10 | ||||
-rw-r--r-- | .idea/vcs.xml | 6 | ||||
-rw-r--r-- | README | 1 | ||||
-rw-r--r-- | bot.py | 3 | ||||
-rw-r--r-- | csvReader.py | 0 | ||||
-rw-r--r-- | downloader.py | 58 | ||||
-rw-r--r-- | main.py | 3 | ||||
-rw-r--r-- | requirements.txt | 16 |
14 files changed, 184 insertions, 0 deletions
diff --git a/.env.template b/.env.template new file mode 100644 index 0000000..e983322 --- /dev/null +++ b/.env.template @@ -0,0 +1,8 @@ +URL= +DOWNLOAD_PATH= +REPORT_AREA_SELECTOR_TYPE="css selector" +REPORT_AREA= +EXPORT_BUTTON_SELECTOR_TYPE="xpath" +EXPORT_BUTTON='//*[@id="mat-menu-panel-0"]/div/span[3]/button' +DOWNLOAD_BUTTON_SELECTOR_TYPE="xpath" +DOWNLOAD_BUTTON='//*[@id="mat-mdc-dialog-0"]/div/div/data-export-dialog/div/mat-dialog-actions/button[2]' diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..ac5c5ac --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,50 @@ +<component name="InspectionProjectProfileManager"> + <profile version="1.0"> + <option name="myName" value="Project Default" /> + <inspection_tool class="DuplicatedCode" enabled="true" level="WEAK WARNING" enabled_by_default="true"> + <Languages> + <language minSize="85" name="Python" /> + </Languages> + </inspection_tool> + <inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true"> + <option name="ignoredPackages"> + <value> + <list size="11"> + <item index="0" class="java.lang.String" itemvalue="pandas" /> + <item index="1" class="java.lang.String" itemvalue="greenlet" /> + <item index="2" class="java.lang.String" itemvalue="six" /> + <item index="3" class="java.lang.String" itemvalue="pyodbc" /> + <item index="4" class="java.lang.String" itemvalue="python-dateutil" /> + <item index="5" class="java.lang.String" itemvalue="SQLAlchemy" /> + <item index="6" class="java.lang.String" itemvalue="psycopg2" /> + <item index="7" class="java.lang.String" itemvalue="python-dotenv" /> + <item index="8" class="java.lang.String" itemvalue="numpy" /> + <item index="9" class="java.lang.String" itemvalue="pytz" /> + <item index="10" class="java.lang.String" itemvalue="typing_extensions" /> + </list> + </value> + </option> + </inspection_tool> + <inspection_tool class="PyPep8Inspection" enabled="true" level="WEAK WARNING" enabled_by_default="true"> + <option name="ignoredErrors"> + <list> + <option value="E402" /> + </list> + </option> + </inspection_tool> + <inspection_tool class="PyPep8NamingInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true"> + <option name="ignoredErrors"> + <list> + <option value="N806" /> + <option value="N802" /> + <option value="N803" /> + </list> + </option> + </inspection_tool> + <inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false"> + <option name="processCode" value="true" /> + <option name="processLiterals" value="true" /> + <option name="processComments" value="true" /> + </inspection_tool> + </profile> +</component>
\ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ +<component name="InspectionProjectProfileManager"> + <settings> + <option name="USE_PROJECT_PROFILE" value="false" /> + <version value="1.0" /> + </settings> +</component>
\ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..4664caf --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="Black"> + <option name="sdkName" value="Python 3.12 (task-watcher)" /> + </component> + <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.12 (task-watcher)" project-jdk-type="Python SDK" /> +</project>
\ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..ae315dc --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectModuleManager"> + <modules> + <module fileurl="file://$PROJECT_DIR$/.idea/task-watcher.iml" filepath="$PROJECT_DIR$/.idea/task-watcher.iml" /> + </modules> + </component> +</project>
\ No newline at end of file diff --git a/.idea/task-watcher.iml b/.idea/task-watcher.iml new file mode 100644 index 0000000..2c80e12 --- /dev/null +++ b/.idea/task-watcher.iml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module type="PYTHON_MODULE" version="4"> + <component name="NewModuleRootManager"> + <content url="file://$MODULE_DIR$"> + <excludeFolder url="file://$MODULE_DIR$/.venv" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> +</module>
\ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="$PROJECT_DIR$" vcs="Git" /> + </component> +</project>
\ No newline at end of file @@ -0,0 +1 @@ +Pengingat ngisi leantime
\ No newline at end of file @@ -0,0 +1,3 @@ +""" +Tergantung hasil pembacaan csvReader, ketrigger kalo bacaan lookerstudio masih di bawah 70% +"""
\ No newline at end of file diff --git a/csvReader.py b/csvReader.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/csvReader.py diff --git a/downloader.py b/downloader.py new file mode 100644 index 0000000..8b74611 --- /dev/null +++ b/downloader.py @@ -0,0 +1,58 @@ +""" +Ini nanti periodik +""" +import os +import time + +from dotenv import load_dotenv +from selenium import webdriver +from selenium.webdriver import ActionChains +from selenium.webdriver.support import expected_conditions as EC +from selenium.webdriver.support.wait import WebDriverWait + +load_dotenv() + + +def driverSetup(url): + 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") + driver = webdriver.Chrome(options=op) + driver.get(url) + return driver + + +def downloadCsv(): + driver = driverSetup(os.getenv('URL')) + 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) + + finally: + driver.quit() + + +if __name__ == '__main__': + downloadCsv() @@ -0,0 +1,3 @@ +from downloader import downloadCsv + +downloadCsv()
\ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..63e822a --- /dev/null +++ b/requirements.txt @@ -0,0 +1,16 @@ +attrs==23.2.0 +certifi==2024.7.4 +h11==0.14.0 +idna==3.7 +outcome==1.3.0.post0 +PySocks==1.7.1 +python-dotenv==1.0.1 +selenium==4.23.1 +sniffio==1.3.1 +sortedcontainers==2.4.0 +trio==0.26.0 +trio-websocket==0.11.1 +typing_extensions==4.12.2 +urllib3==2.2.2 +websocket-client==1.8.0 +wsproto==1.2.0 |