From 7d90b4b4e3959f2ff80fc1064618c8c1e4ff1caf Mon Sep 17 00:00:00 2001 From: Daniel Tomlinson Date: Sat, 5 Oct 2019 17:15:35 +0100 Subject: [PATCH] pullTrafficInfo script created --- slack-bot/pullTrafficInfo.py | 57 ++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 slack-bot/pullTrafficInfo.py diff --git a/slack-bot/pullTrafficInfo.py b/slack-bot/pullTrafficInfo.py new file mode 100644 index 0000000..4a9a071 --- /dev/null +++ b/slack-bot/pullTrafficInfo.py @@ -0,0 +1,57 @@ +from selenium import webdriver +from selenium.common.exceptions import NoSuchElementException +from datetime import datetime +import re + + +class getTrafficInfo(object): + """docstring for getTrafficInfo""" + def __init__(self, browser): + super(getTrafficInfo, self).__init__() + self.browser = browser + self.incidentTypes = ['congestion', 'accident'] + + @classmethod + def getTrafficURL(cls, motorway, driver='chrome'): + url = ('https://www.trafficdelays.co.uk/' + motorway.lower() + + '-traffic-delays') + browser = getTrafficInfo.getWebDriver(driver, url) + getTrafficInfo.verfiyMotorway(browser, motorway) + return cls(browser) + + @staticmethod + def getWebDriver(driver, url): + driver = driver.lower() + if driver == 'chrome': + # Prepare the option for the Chromedriver + options = webdriver.ChromeOptions() + options.add_argument('headless') + # Start the Chromedriver + browser = webdriver.Chrome(options=options) + browser.get(url) + return browser + else: + raise Exception(f'Driver {driver} not supported') + + @staticmethod + def verfiyMotorway(browser, motorway): + try: + verify = browser.find_element_by_xpath('/html/body/div[1]/div/div/' + 'div/section/div/div/' + 'div[1]') + if verify.text in ('It looks like the link pointing here ' + 'was faulty. Maybe try searching?'): + raise Exception(f'No traffic information available for' + f' {motorway}') + except NoSuchElementException: + pass + + def findIncidents(self): + for item in self.incidentTypes: + xpath = f'//*[@id="{item}"]' + setattr(self, f'item', self.browser.find_element_by_xpath(xpath)) + print(self.item.text) + return self + + +inst = getTrafficInfo.getTrafficURL('M62').findIncidents()