Advertisement
Guest User

Untitled

a guest
Nov 21st, 2019
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.51 KB | None | 0 0
  1. import datetime
  2. import os
  3. import time
  4.  
  5. from selenium.webdriver.common.keys import Keys
  6. from selenium.webdriver.support.ui import Select
  7. from selenium import webdriver
  8. from selenium.common.exceptions import ElementClickInterceptedException
  9. import selenium.common.exceptions as selenium_exceptions
  10.  
  11.  
  12. def create_dir_for_download():
  13.     date = str(datetime.datetime.now())[:10]
  14.     download_dir = os.getcwd() + "/download"
  15.     try:
  16.         os.mkdir(download_dir)
  17.     except Exception:
  18.         pass
  19.  
  20.     download_dir = os.getcwd() + "/download/" + date
  21.     try:
  22.         os.mkdir(download_dir)
  23.     except Exception:
  24.         pass
  25.  
  26.     return download_dir
  27.  
  28.  
  29. def create_driver(download_dir: str, is_headless=False):
  30.     options = webdriver.ChromeOptions()
  31.     options.headless = is_headless
  32.  
  33.     prefs = {
  34.         "download.default_directory": download_dir,
  35.     }
  36.     options.add_experimental_option('prefs', prefs)
  37.  
  38.     return webdriver.Chrome(executable_path='./chromedriver', options=options)
  39.  
  40.  
  41. def wait_while_file_download(download_dir):
  42.     files_in_download_dir = os.listdir(download_dir)
  43.     is_some_file_downloads = True
  44.     while is_some_file_downloads:
  45.         time.sleep(1)
  46.         is_all_fies_downloaded = True
  47.         for file in files_in_download_dir:
  48.             if ".crdownload" in file:
  49.                 is_all_fies_downloaded = False
  50.         is_some_file_downloads = not is_all_fies_downloaded
  51.         files_in_download_dir = os.listdir(download_dir)
  52.  
  53.  
  54. def remove_broken_files(download_dir: str):
  55.     for file in os.listdir(download_dir):
  56.         if (".crdownload" in file):
  57.             os.remove(download_dir + "/" + file)
  58.  
  59.  
  60. def click_element_from_dropdown_menu(driver: webdriver.Chrome, id=0):
  61.     elements_data_ids = ["x:562890744.8:adr:0", "x:562890744.9:adr:1", "x:562890744.10:adr:2", "x:562890744.11:adr:3",
  62.                          "x:562890744.12:adr:4", "x:562890744.13:adr:5"]
  63.     drop_down_btn = find_btn(driver, "img", "data-ig", "x:562890744.4:mkr:ButtonImage")
  64.     drop_down_btn.click()
  65.     time.sleep(3)
  66.     element = find_btn(driver, "li", "data-ig", elements_data_ids[id])
  67.     element.click()
  68.  
  69.  
  70. def open_main_page(driver: webdriver.Chrome):
  71.     driver.get("https://pipeline2.kindermorgan.com/Capacity/OpAvailStorage.aspx?code=NGPL")
  72.  
  73.  
  74. def find_btn(driver: webdriver.Chrome, tag, parameter_name, srcValue):
  75.     for btn in driver.find_elements_by_tag_name(tag):
  76.         if btn.get_attribute(parameter_name) == srcValue:
  77.             return btn
  78.  
  79.  
  80. def click_download(driver: webdriver.Chrome):
  81.     find_btn(driver, "input", "alt", "Download Data").click()
  82.     time.sleep(3)
  83.  
  84.  
  85. def download_point_capacity(driver: webdriver.Chrome, date, is_download_all=False):
  86.     open_main_page(driver)
  87.     find_btn(driver, "img", "alt", "Expand Capacity").click()
  88.     find_btn(driver, "img", "alt", "Expand Operationally Available").click()
  89.     find_btn(driver, "li", "data-ig", "x:173558890.7:adr:0.0.0.0").click()
  90.  
  91.     date_field = driver.find_element_by_class_name("igte_NautilusEditInContainer")
  92.     for i in range(10):
  93.         date_field.send_keys(Keys.BACKSPACE)
  94.     date_field.send_keys(date.strftime("%m%d%Y"))
  95.  
  96.  
  97.  
  98.     download_from_page(driver, is_download_all)
  99.  
  100.     radio_btn = driver.find_element_by_id("WebSplitter1_tmpl1_ContentPlaceHolder1_rbReceipt")
  101.     radio_btn.click()
  102.  
  103.     download_from_page(driver, is_download_all)
  104.  
  105.  
  106. def download_storage_capacity(driver: webdriver.Chrome, date, is_download_all=False):
  107.     open_main_page(driver)
  108.     find_btn(driver, "img", "alt", "Expand Capacity").click()
  109.     find_btn(driver, "img", "alt", "Expand Operationally Available").click()
  110.     find_btn(driver, "li", "data-ig", "x:173558890.11:adr:0.0.0.2").click()
  111.  
  112.     date_field = driver.find_element_by_class_name("igte_NautilusEditInContainer")
  113.     for i in range(10):
  114.         date_field.send_keys(Keys.BACKSPACE)
  115.     date_field.send_keys(date.strftime("%m%d%Y"))
  116.  
  117.     download_from_page(driver, is_download_all)
  118.  
  119. def download_from_page(driver: webdriver.Chrome, is_download_all):
  120.     current_site_page = driver.current_url
  121.     if not is_download_all:
  122.         click_download(driver)
  123.     else:
  124.         for i in range(6):
  125.             try:
  126.                 click_element_from_dropdown_menu(driver, i)
  127.                 time.sleep(1)
  128.                 click_download(driver)
  129.             except Exception as e:
  130.                 if "An Error Has Occurred" not in driver.page_source:
  131.                     raise e
  132.                 print("Ошибка при загрузке")
  133.                 driver.get(current_site_page)
  134.  
  135. def run(start_date: datetime.date, end_date: datetime.date, is_need_download_all):
  136.     download_dir = create_dir_for_download()
  137.     remove_broken_files(download_dir)
  138.     driver = create_driver(download_dir, is_headless=False)
  139.  
  140.     current_date = start_date
  141.     while current_date <= end_date:
  142.         time.sleep(1)
  143.         try:
  144.             download_point_capacity(driver, current_date, is_need_download_all)
  145.             download_storage_capacity(driver, current_date, is_need_download_all)
  146.         except Exception as e:
  147.             # if "<class 'selenium.common.exceptions" not in str(e.__class__):
  148.             raise e
  149.             # print("Не удалось загрузить файл(ы) для " + current_date.strftime("%m/%d/%Y"))
  150.  
  151.         current_date += datetime.timedelta(days=1)
  152.  
  153.  
  154. if __name__ == "__main__":
  155.     start_date = datetime.date(2019, 10, 5)
  156.     end_date = datetime.date(2019, 10, 5)
  157.     run(start_date, end_date, is_need_download_all=True)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement