Files
test-loderweb/main.py
2026-01-16 19:19:15 +05:00

122 lines
5.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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()