import csv
import urllib.request
import urllib.parse
import os
import re
import time
# --- НАСТРОЙКИ ---
CSV_FILE = 'docs.csv'
DOWNLOAD_DIR = './downloads'
# Вставьте куки из DevTools (те, что на скриншоте)
COOKIE = "_ym_d=1776411917; _ym_uid=1776411917886570665; WSS_FullScreenMode=false"
# Базовая ссылка со скриншота
BASE_URL = "https://main.atb.su/normdocs/Lists/Docs/ByCategory.aspx"
BASE_DOMAIN = "https://main.atb.su"
os.makedirs(DOWNLOAD_DIR, exist_ok=True)
opener = urllib.request.build_opener()
opener.addheaders = [
('Cookie', COOKIE),
('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36')
]
urllib.request.install_opener(opener)
def clean_html(text):
return re.sub(r'<[^>]+>', '', text).strip()
def run():
# Читаем CSV с разделителем ';' (точка с запятой)
with open(CSV_FILE, mode='r', encoding='utf-8-sig') as f:
reader = csv.DictReader(f, delimiter=';')
for row in reader:
title = row.get('Название', '').strip()
category = row.get('Категория', '').strip()
if not title:
continue
print(f"\nПоиск: {title[:50]}... Категория: {category}")
# Фильтруем сразу по Названию (Title) и Категории (DocCategory)
params = {
'FilterField1': 'Title',
'FilterValue1': title,
'FilterField2': 'DocCategory',
'FilterValue2': category
}
query = urllib.parse.urlencode(params)
search_url = f"{BASE_URL}?{query}"
try:
with urllib.request.urlopen(search_url) as resp:
html = resp.read().decode('utf-8')
# Ищем строку в таблице (ms-itmhover)
rows = re.findall(r'<tr[^>]*class="[^"]*ms-itmhover[^"]*"[^>]*>(.*?)</tr>', html, re.S | re.I)
if not rows:
print(" [-] Не найдено. Проверьте название или категорию в CSV.")
continue
for row_html in rows:
row_text = clean_html(row_html)
# Проверяем статус "Действителен" как на скриншотах
if "Действителен" not in row_text:
print(" [!] Пропуск (статус не 'Действителен').")
continue
# Ищем ссылку на вложение (на скриншоте это href="Attachments/...")
link_match = re.search(r'href="([^"]*?Attachments/[^"]+)"', row_html, re.I)
if link_match:
file_url = urllib.parse.urljoin(BASE_DOMAIN, link_match.group(1))
file_name = urllib.parse.unquote(file_url.split('/')[-1])
print(f" [+] Найдено! Скачиваю: {file_name}")
with urllib.request.urlopen(file_url) as f_resp, open(os.path.join(DOWNLOAD_DIR, file_name), 'wb') as out:
out.write(f_resp.read())
time.sleep(1) # Пауза для стабильности
break
except Exception as e:
print(f" [!] Ошибка: {e}")
if __name__ == "__main__":
run()
print("\nЗавершено!")