mirror of
https://github.com/Balshgit/mosgortrans.git
synced 2025-09-11 13:00:40 +03:00
72 lines
2.8 KiB
Python
72 lines
2.8 KiB
Python
import os
|
|
import sys
|
|
import tarfile
|
|
import time
|
|
from pathlib import Path
|
|
|
|
import wget
|
|
from loguru import logger
|
|
from selenium import webdriver
|
|
from selenium.common.exceptions import NoSuchElementException
|
|
from selenium.webdriver.firefox import options
|
|
from selenium.webdriver.firefox.service import Service
|
|
from selenium.webdriver.firefox.webdriver import WebDriver
|
|
|
|
from settings import BASE_DIR, GECKO_DRIVER_VERSION
|
|
|
|
logger.remove()
|
|
logger.add(sink=sys.stdout, colorize=True, level='DEBUG',
|
|
format="<cyan>{time:DD.MM.YYYY HH:mm:ss}</cyan> | <level>{level}</level> | "
|
|
"<magenta>{message}</magenta>")
|
|
|
|
|
|
def download_gecko_driver():
|
|
gecko_driver = f'https://github.com/mozilla/geckodriver/releases/download/v{GECKO_DRIVER_VERSION}/' \
|
|
f'geckodriver-v{GECKO_DRIVER_VERSION}-linux64.tar.gz'
|
|
|
|
if not Path(f'{BASE_DIR}/geckodriver').exists():
|
|
logger.info(f'Downloading gecodriver v {GECKO_DRIVER_VERSION}...')
|
|
geckodriver_file = wget.download(url=gecko_driver, out=BASE_DIR)
|
|
|
|
with tarfile.open(geckodriver_file) as tar:
|
|
tar.extractall(BASE_DIR)
|
|
os.remove(f'{BASE_DIR}/geckodriver-v{GECKO_DRIVER_VERSION}-linux64.tar.gz')
|
|
logger.info(f'\ngeckodriver has been downloaded to folder {BASE_DIR}')
|
|
|
|
|
|
def configure_firefox_driver(private_window: bool = False) -> WebDriver:
|
|
opt = options.Options()
|
|
opt.headless = True
|
|
opt.add_argument('-profile')
|
|
opt.add_argument(f'{Path.home()}/snap/firefox/common/.mozilla/firefox')
|
|
if private_window:
|
|
opt.set_preference("browser.privatebrowsing.autostart", True)
|
|
service = Service(executable_path=f'{BASE_DIR}/geckodriver')
|
|
firefox_driver = webdriver.Firefox(service=service, options=opt)
|
|
|
|
return firefox_driver
|
|
|
|
|
|
def parse_site(driver: WebDriver) -> str:
|
|
driver.get(
|
|
'https://yandex.ru/maps/213/moscow/stops/stop__9640740/?l=masstransit&ll=37.527754%2C55.823507&tab=overview&z=21'
|
|
)
|
|
time.sleep(4)
|
|
elements = driver.find_elements(by='class name', value='masstransit-vehicle-snippet-view')
|
|
|
|
bus_300, bus_t19 = None, None
|
|
bus_300_arrival, bus_t19_arrival = None, None
|
|
|
|
for element in elements:
|
|
try:
|
|
bus_300 = element.find_element(by='css selector', value='[aria-label="300"]')
|
|
bus_300_arrival = element.find_element(by='class name', value='masstransit-prognoses-view__title-text')
|
|
except NoSuchElementException:
|
|
pass
|
|
try:
|
|
bus_t19 = element.find_element(by='css selector', value='[aria-label="т19"]')
|
|
bus_t19_arrival = element.find_element(by='class name', value='masstransit-prognoses-view__title-text')
|
|
except NoSuchElementException:
|
|
pass
|
|
return f'Автобус {bus_300.text} - {bus_300_arrival.text}\nАвтобус {bus_t19.text} - {bus_t19_arrival.text}'
|