Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from selenium import webdriver
- from selenium.webdriver.common.keys import Keys
- import win32com.client as comclt
- import time
- import datetime
- from selenium.common.exceptions import TimeoutException
- from selenium.webdriver.common.by import By
- from selenium.webdriver.support.ui import WebDriverWait
- from selenium.webdriver.support import expected_conditions as EC
- import re
- import os
- ts = time.time()
- st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
- wsh= comclt.Dispatch("WScript.Shell")
- base_url = 'https://www.reservecalifornia.com/CaliforniaWebHome/'
- rxp_premium = '^Premium Campsite \#M\d{1,3}'
- rxp_site = 'Santa Miguel.*'
- attr_available = 'blue_brd_box'
- timeout_delay = 3 # seconds
- # search options
- start_date = '02/03/2020'
- num_nights = 3
- def open_baseurl(url):
- chrome_driver = r'C:\bin\chromedriver.exe'
- chrome_profile = os.path.join(os.getenv('LOCALAPPDATA'), 'Google', 'Chrome', 'User Data')
- chrome_options = webdriver.chrome.options.Options()
- chrome_options.add_argument('--ignore-certificate-errors')
- chrome_options.add_argument('--ignore-certificate-errors-spki-list')
- chrome_options.add_argument('--ignore-ssl-errors')
- # chrome_options.add_argument('--user-data-dir={0}'.format(chrome_profile))
- driver = webdriver.Chrome(executable_path=chrome_driver, options=chrome_options)
- driver.implicitly_wait(3) # seconds
- driver.get("https://www.reservecalifornia.com/CaliforniaWebHome/")
- return driver
- def reserve(driver, start_date, num_nights):
- park = driver.find_element_by_id('txtSearchparkautocomplete')
- park.send_keys('Carpinteria SB')
- time.sleep(0.5)
- park.send_keys(Keys.TAB)
- park.send_keys(Keys.TAB)
- arrival = driver.find_element_by_id('mainContent_txtArrivalDate')
- arrival.click()
- arrival.click()
- arrival.clear()
- arrival.send_keys(start_date)
- nights = driver.find_element_by_id('ddlHomeNights')
- nights.click()
- nights.send_keys(str(num_nights))
- nights.click()
- rental = driver.find_element_by_id('ddl_homeCategories')
- rental.send_keys('camp')
- rental.click()
- equip = driver.find_element_by_id('ddl_homeCampingUnit')
- equip.click()
- equip.send_keys('trail')
- equip.click()
- driver.find_element_by_link_text("Search").click()
- return driver
- def select_facility(rxp_site):
- try:
- element = WebDriverWait(driver, timeout_delay).until(EC.presence_of_element_located((By.ID, 'number_6')))
- except TimeoutException:
- print('timeout?')
- xpath_rows = "//div[@id='number_6']/div[@class='table_data_box table-responsive']/table/tbody/tr"
- rows = driver.find_elements_by_xpath(xpath_rows)
- for row in rows:
- m = re.match(rxp_site, row.text)
- if m:
- for r in row.find_elements_by_xpath('.//following-sibling::tr'):
- if re.match('Premium Campsite', r.text):
- premium_link = r.find_element_by_tag_name('a')
- premium_link.click()
- return driver
- def get_premium_rows():
- premium_rows = []
- table = driver.find_element_by_id('mainContent_ugReservationGrid_tableGridParent').find_element_by_xpath('.//child::table/tbody')
- rows = table.find_elements_by_css_selector('tr.unitdata')
- for row in rows:
- link = row.find_element_by_xpath(".//child::td[@class='first_td_new']/a")
- site_title = link.get_attribute('title')
- if re.match(rxp_premium, site_title):
- ancestor_row = link.find_element_by_xpath(".//ancestor::tr[@class='unitdata']")
- premium_rows.append(ancestor_row)
- return premium_rows
- driver = open_baseurl(base_url)
- driver = reserve(driver, start_date, num_nights)
- driver = select_facility(rxp_site)
- site_list = get_premium_rows()
- print('Available sites: ', len(sites))
- for p in sites:
- print(p['sitename'], ':', len(p['slots']))
- slots = site.find_elements_by_xpath(".//child::td[contains(@class, 'brd_box')]")
- slot_list = []
- for i in range((len(slots) - 1)):
- slot_isvalid = False
- if (i + num_nights) > len(slots):
- print('ignoring site')
- break
- for j in range(i, (i + num_nights)):
- print(j)
- if slots[j].get_attribute('class') != 'blue_brd_box':
- break
- else:
- slot_isvalid = True
- if slot_isvalid is True:
- slot_list.append(slots[i])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement