diff --git a/.gitignore b/.gitignore index 4b6d053..c718981 100644 --- a/.gitignore +++ b/.gitignore @@ -144,3 +144,4 @@ cython_debug/ # my staff delete/ +geckodriver diff --git a/app/core/parse_web.py b/app/core/parse_web.py index 07dc8dc..f988d97 100644 --- a/app/core/parse_web.py +++ b/app/core/parse_web.py @@ -6,7 +6,7 @@ from pathlib import Path import wget from core.logger import logger from selenium import webdriver -from selenium.common.exceptions import NoSuchElementException +from selenium.common.exceptions import NoSuchElementException, WebDriverException from selenium.webdriver.firefox import options from selenium.webdriver.firefox.service import Service from selenium.webdriver.firefox.webdriver import WebDriver @@ -31,7 +31,7 @@ def download_gecko_driver() -> None: logger.info(f'\ngeckodriver has been downloaded to folder {BASE_DIR}') -def configure_firefox_driver(private_window: bool = False) -> WebDriver: +def configure_firefox_driver(private_window: bool = False) -> WebDriver | None: opt = options.Options() opt.headless = True opt.add_argument('-profile') @@ -39,12 +39,18 @@ def configure_firefox_driver(private_window: bool = False) -> WebDriver: if private_window: opt.set_preference("browser.privatebrowsing.autostart", True) service = Service(executable_path=BASE_DIR / 'geckodriver') - firefox_driver = webdriver.Firefox(service=service, options=opt) - - return firefox_driver + try: + firefox_driver = webdriver.Firefox(service=service, options=opt) + return firefox_driver + except WebDriverException: + logger.error('Error configuring webdriver. Possible it already configured') + return None -def parse_site(driver: WebDriver, url: str, message: str) -> str: +def parse_site(url: str, message: str, driver: WebDriver | None = None) -> str: + if not driver: + logger.error('Driver is not configured') + return 'Что-то пошло не так. :( Драйвер Firefox не сконфигурирован.' driver.get(url) time.sleep(4) elements = driver.find_elements( diff --git a/app/main.py b/app/main.py index 61a8820..1082404 100644 --- a/app/main.py +++ b/app/main.py @@ -1,6 +1,6 @@ from aiogram import Dispatcher from aiogram.utils.executor import start_polling, start_webhook -from core.bot import bot, dispatcher +from core.bot import bot, dispatcher, driver from core.logger import logger from core.scheduler import asyncio_schedule from settings import ( @@ -24,6 +24,8 @@ async def on_shutdown(dp: Dispatcher) -> None: await bot.delete_webhook() # Close DB connection (if used) + if driver: + driver.close() await dispatcher.storage.close() await dispatcher.storage.wait_closed()