Skip to content

Instantly share code, notes, and snippets.

@eupendra
Created September 18, 2020 13:01
Show Gist options
  • Save eupendra/f0f16a087ddaccc0d7fbc21a9f82801e to your computer and use it in GitHub Desktop.
Save eupendra/f0f16a087ddaccc0d7fbc21a9f82801e to your computer and use it in GitHub Desktop.
from selenium.webdriver import Chrome, ChromeOptions
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import csv
options = ChromeOptions()
options.headless = True
driver = Chrome(executable_path=r"c:\Program Files (x86)\Chromedriver\chromedriver.exe",
options=options)
driver.get('https://directory.ntschools.net/#/schools')
selector = '#search-panel-container .nav-link'
links = WebDriverWait(driver, 60).until(
EC.presence_of_all_elements_located((By.CSS_SELECTOR, selector))
)
results = []
school_name_selector = '.school-title ~ h1'
for i in range(3):
links = WebDriverWait(driver, 60).until(
EC.presence_of_all_elements_located((By.CSS_SELECTOR, selector))
)
links[i].click()
name_e = WebDriverWait(driver, 60).until(
EC.presence_of_element_located((By.CSS_SELECTOR, school_name_selector))
)
details = {
'name': name_e.text,
'ph_address': driver.find_element_by_xpath('//div[text()="Physical Address"]/following-sibling::div').text,
'po_address': driver.find_element_by_xpath('//*[text()="Postal Address"]/following-sibling::*').text,
'phone': driver.find_element_by_xpath('//*[text()="Phone"]/following-sibling::*/a').text,
}
results.append(details)
driver.back()
driver.quit()
with open('schools_data.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.DictWriter(f,
fieldnames=['name', 'ph_address', 'po_address', 'phone'])
writer.writeheader()
writer.writerows(results)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment