This commit is contained in:
jze9
2026-01-16 19:19:15 +05:00
commit 98f6188e12
6 changed files with 390 additions and 0 deletions

121
main.py Normal file
View File

@@ -0,0 +1,121 @@
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()