122 lines
5.8 KiB
Python
122 lines
5.8 KiB
Python
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()
|