import sys import time import logging from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.firefox.service import Service as FirefoxService from selenium.webdriver.firefox.options import Options as FirefoxOptions from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # Настройка логирования в терминал logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') def setup_driver(download_dir): """Настраивает и возвращает веб-драйвер с опциями для загрузки файлов.""" try: firefox_options = FirefoxOptions() firefox_options.set_preference("browser.download.folderList", 2) firefox_options.set_preference("browser.download.dir", download_dir) firefox_options.set_preference("browser.download.useDownloadDir", True) firefox_options.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream") # firefox_options.add_argument("--headless") firefox_options.binary_location = r"C:\Program Files\Mozilla Firefox\firefox.exe" logging.info("Запуск Firefox драйвера...") driver = webdriver.Firefox(options=firefox_options) driver.set_page_load_timeout(300) # Timeout для загрузки страницы logging.info("Драйвер запущен успешно.") return driver except Exception as e: logging.error(f"Ошибка при настройке драйвера: {e}") raise def log_page_content(driver): """Логирует содержимое страницы в терминал.""" try: title = driver.title logging.info(f"Заголовок страницы: {title}") # Попробуем найти основной контент try: main_content = driver.find_element(By.TAG_NAME, 'h1').text logging.info(f"Основной заголовок: {main_content}") except: logging.info("Основной заголовок не найден.") logging.info("Логирование содержимого завершено.") except Exception as e: logging.error(f"Ошибка при получении содержимого страницы: {e}") def upload_file(driver, file_path, selector='input[type="file"]', by=By.CSS_SELECTOR): """Загружает файл в input по селектору.""" try: # Сначала попробуем кликнуть на видимую область загрузки try: drop_area = driver.find_element(By.CSS_SELECTOR, '.upload-area, .drop-zone, [data-upload]') drop_area.click() time.sleep(1) except: pass file_input = WebDriverWait(driver, 10).until(EC.presence_of_element_located((by, selector))) file_input.send_keys(file_path) logging.info(f"Файл загружен: {file_path}") except Exception as e: logging.error(f"Ошибка при загрузке файла {file_path}: {e}") def close_cookie_banner(driver): """Закрывает cookie-баннер, если он есть.""" try: logging.info("Попытка закрыть cookie-баннер...") logging.info("Ищу кнопки...") buttons = driver.find_elements(By.TAG_NAME, 'button') logging.info(f"Найдено кнопок: {len(buttons)}") for button in buttons: text = button.text.lower() logging.info(f"Кнопка: {text}") if 'принять' in text or 'accept' in text or 'ok' in text or 'соглас' in text: button.click() logging.info("Cookie-баннер закрыт.") time.sleep(1) return # Если не нашли, попробуем по классу или id try: driver.find_element(By.ID, 'cookie-accept').click() logging.info("Cookie-баннер закрыт по ID.") except: try: driver.find_element(By.CLASS_NAME, 'cookie-accept').click() logging.info("Cookie-баннер закрыт по классу.") except: logging.info("Cookie-баннер не найден.") except Exception as e: logging.error(f"Ошибка при закрытии cookie-баннера: {e}") def main(): url = "https://convertio.co/ru/document-converter/" file_path = "c:\\Users\\jze9\\Documents\\git\\test-loderweb\\test.txt" download_dir = "C:\\Users\\jze9\\Downloads" # Укажите путь для загрузок driver = setup_driver(download_dir) try: logging.info(f"Переход на страницу: {url}") driver.get(url) logging.info("Страница загружена.") time.sleep(5) # Ждем загрузки # close_cookie_banner(driver) # Закрываем cookie-баннер log_page_content(driver) # Загрузить файл upload_file(driver, file_path) # Возможно, нажать кнопку конвертации, если нужно # click_button(driver, 'button.convert') # Пример селектора time.sleep(300) # Ждем дольше для симуляции input("Нажмите Enter для выхода...") # Чтобы браузер не закрывался сразу finally: logging.info("Программа завершена, браузер остаётся открытым.") if __name__ == "__main__": main()