Гид по технологиям

Скачать аватар Instagram с помощью Selenium и Python

6 min read Веб-автоматизация Обновлено 08 Jan 2026
Скачать аватар Instagram через Selenium и Python
Скачать аватар Instagram через Selenium и Python

TL;DR

Кратко: с помощью Selenium и Python можно автоматически открыть страницу профиля Instagram, найти URL аватара и скачать изображение без входа в аккаунт. Ниже — пошаговая инструкция, готовый код, улучшения (webdriver-manager, headless), сценарии отказа и рекомендации по безопасности и отладке.

Окно ноутбука и мобильного с открытым аккаунтом Instagram

Профильная фотография — один из ключевых элементов аккаунта в социальных сетях. Однако интерфейсы вроде Instagram обычно не предлагают прямую кнопку «скачать». Эту задачу удобно решать с помощью веб‑автоматизации: Selenium + Python. Метод позволяет целенаправленно получить атрибут src тега и сохранить файл локально.

Важно: статья разбирает способ для образовательных и легитимных задач (резервное копирование собственных аккаунтов, анализ открытых данных). Не используйте методы для нарушения приватности или массовой автоматизации без разрешения.

Что вы получите из этой статьи

  • Понимание алгоритма: от имени пользователя до сохранённого файла.
  • Готовый код — простой и улучшенный вариант.
  • Альтернативы и рекомендации по надёжности.
  • Список распространённых ошибок и способы их исправить.
  • Примеры тестов и критерии приёмки.

Алгоритм решения (коротко)

  1. Получить имя пользователя (username).
  2. Открыть браузер (Chrome) с помощью Selenium.
  3. Перейти на https://www.instagram.com/{username}/.
  4. Найти элемент с аватаром и взять его атрибут src.
  5. Скачать файл по ссылке на диск.

Требуемые модули и инструменты

Ниже перечислены модули и зачем они нужны.

Python и pip

Убедитесь, что у вас установлен Python 3.8+ и актуальная версия pip.

urllib.request

Стандартный модуль Python для загрузки файлов по URL. Альтернатива — requests.

time

Используется для простых задержек (time.sleep), чтобы дождаться загрузки страницы. Для стабильных решений лучше использовать явные ожидания Selenium.

selenium

Библиотека для автоматизации браузера. Устанавливается командой:

pip install selenium

(Если вы используете менеджер зависимостей, добавьте в requirements.)

webdriver (ChromeDriver)

ChromeDriver связывает Selenium с браузером Chrome. Раньше его скачивали вручную, сейчас проще использовать webdriver-manager (см. раздел улучшения).

Как инспектировать страницу и найти аватар

Небольшое объяснение для тех, кто впервые работает с веб‑страницами.

  • HTML — разметка страницы; элементы имеют теги, атрибуты, классы и id.
  • CSS-классы и id помогают точно выбрать нужный элемент.
  • В DevTools используйте «Element picker» и смотрите, какой тег и класс у изображения профиля.

Шаги в Chrome:

  1. Откройте страницу профиля Instagram.
  2. Откройте Меню → Дополнительные инструменты → Инструменты разработчика или нажмите Ctrl+Shift+I.

Страница

  1. Нажмите на инструмент выбора элемента (курсор) и наведите на аватар.

Версия браузера Google Chrome показана на странице о программе

Замечания по Instagram (на момент написания): класс тега изображения может отличаться для публичных и приватных аккаунтов. В примерах встречаются классы вроде _aa8j (публичный) и _aadp (приватный). Instagram часто меняет имена классов — поэтому код должен содержать запасы (fallback) или более устойчивые селекторы.

Скачивание ChromeDriver с сайта разработчика

Выбор версии ChromeDriver для Windows

Инструменты разработчика Chrome

Инструмент выбора элемента в DevTools

Класс изображения у публичного профиля

Класс изображения у приватного профиля

Простой рабочий пример (оригинальный код, переведён и сохранён)

Ниже — минимальный скрипт, близкий к оригиналу статьи. Он демонстрирует идею, но в продакшн‑окружении его следует улучшить.

# импорт необходимых модулей
from selenium import webdriver
import time
import urllib.request

# ввод имени пользователя
user_h=input("Enter the username of the profile: ")

# формируем URL профиля
url='https://www.instagram.com/'
url_p=url+user_h

# путь к chromedriver (пример для Windows)
cd='chromedriver.exe'

# запускаем Chrome
driver = webdriver.Chrome(cd)

# открываем профиль
driver.get(url_p)

# короткая пауза для загрузки
time.sleep(5)

try:
    # если профиль публичный, ищем изображение с классом _aa8j
    image=driver.find_element_by_xpath('//img[@class="_aa8j"]')
except:
    # если профиль приватный, ищем изображение с классом _aadp
    image=driver.find_element_by_xpath('//img[@class="_aadp"]')

# получаем ссылку на изображение
img_link=image.get_attribute('src')

# где сохранить (пример D:\username.jpg)
path="D:\\"+user_h+".jpg"

# скачиваем
urllib.request.urlretrieve(img_link,path)

print("The profile pic has been downloaded at: "+path)

Примечание: метод find_element_by_xpath в новых версиях Selenium помечен устаревшим; лучше использовать синтаксис с By.

Улучшенный и более надёжный вариант (рекомендуется)

Этот вариант использует webdriver-manager (чтобы не загружать вручную chromedriver), явные ожидания и современные API Selenium 4.

Установите дополнительные зависимости:

pip install webdriver-manager

Пример кода:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
import urllib.request
import os

# ввод имени пользователя
username = input('Введите username профиля: ').strip()

# формируем URL
url = f'https://www.instagram.com/{username}/'

# создаём службу chromedriver через webdriver-manager
service = Service(ChromeDriverManager().install())
options = webdriver.ChromeOptions()
# options.add_argument('--headless=new')  # раскомментируйте для безголового режима
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')

driver = webdriver.Chrome(service=service, options=options)
wait = WebDriverWait(driver, 10)

try:
    driver.get(url)
    # ждём появления любого тега img в DOM и затем ищем подходящий
    wait.until(EC.presence_of_element_located((By.TAG_NAME, 'img')))

    img_link = None
    # Попробуем набор стратегий поиска: устойчивые селекторы с резервом
    strategies = [
        '//img[@class="_aa8j"]',
        '//img[@class="_aadp"]',
        # универсальная проверка: ищем первое большое изображение профиля
        '//header//img',
        '//img[contains(@src, "profile")]',
        '//img[contains(@alt, "profile picture")]'
    ]

    for xpath in strategies:
        try:
            el = driver.find_element(By.XPATH, xpath)
            src = el.get_attribute('src')
            if src and src.startswith('http'):
                img_link = src
                break
        except Exception:
            continue

    if not img_link:
        raise RuntimeError('Не удалось найти ссылку на изображение')

    # путь сохранения
    dest_dir = os.path.join(os.getcwd(), 'downloads')
    os.makedirs(dest_dir, exist_ok=True)
    dest_path = os.path.join(dest_dir, f'{username}.jpg')

    urllib.request.urlretrieve(img_link, dest_path)
    print(f'Аватар сохранён: {dest_path}')

finally:
    driver.quit()

Пояснения:

  • webdriver-manager автоматизирует загрузку совместимой версии ChromeDriver.
  • WebDriverWait + expected_conditions заменяют простые time.sleep и делают код более стабильным.
  • Опции Chrome позволяют включать headless‑режим на серверах.

Альтернативные подходы

  • Использовать requests + BeautifulSoup: если страница возвращает HTML с явным URL картинки (но Instagram часто подгружает контент динамически, поэтому requests может вернуть не всё).
  • Использовать официальное Instagram Graph API: требует авторизации и токена, подходит для работы с собственными аккаунтами и страницами бизнеса.
  • Онлайн‑сервисы и расширения браузера: быстрый путь без кода, но будьте осторожны с приватностью и рекламой.

Когда способ даёт сбой и как это исправлять

  • Класс элемента меняется: используйте более универсальные селекторы (по структуре header//img) и несколько запасных XPath.
  • Контент подгружается динамически: применяйте явные ожидания (WebDriverWait).
  • Страница возвращает страницу логина/рейд‑лимит: проверьте, не требуется ли авторизация.
  • Для приватных аккаунтов высокое разрешение аватара недоступно без входа: в этом случае получить полноразмерную картинку нельзя.

Безопасность, этика и соответствие правилам

  • Загружайте только открытые изображения и используйте данные ответственно.
  • Не применяйте массовую автоматизацию без разрешения — это может нарушать правила платформы.
  • Храните полученные файлы в защищённом месте, если они содержат чувствительную информацию.

Технические рекомендации и хейт‑проактивные меры

  • Используйте отдельный профиль браузера для автоматизации.
  • Ограничивайте частоту запросов (throttling, sleep, backoff) — это уменьшит шанс блокировки.
  • Логируйте HTTP‑ошибки и содержимое страниц для последующего анализа.

Критерии приёмки

  • Скрипт принимает корректный username и возвращает файл формата JPG/PNG в папку downloads.
  • Скрипт завершает работу без ошибок в течение допустимого времени (например, 30 с).
  • В случае несуществующего профиля скрипт сообщает понятную ошибку.

Тестовые сценарии и случаи приёмки

  • Публичный профиль с аватаром — ожидание: файл скачан.
  • Приватный профиль — ожидание: если доступно превью, скачали превью; иначе сообщение о невозможности.
  • Неверный username — скрипт сообщает ошибку и не создаёт файл.
  • Отсутствие сети — скрипт сообщает о сетевой ошибке и корректно завершает работу.

Чеклист ролей (разработчик / оператор)

  • Разработчик: добавить обработку исключений, логирование, unit‑тесты для вспомогательных функций.
  • Оператор: убедиться, что Chrome и драйвер совместимы; при необходимости включить headless режим.

Шаблон быстрого руководства (SOP)

  1. Установить зависимости: selenium, webdriver-manager.
  2. Запустить скрипт: python download_avatar.py.
  3. Ввести username.
  4. Проверить папку ./downloads.
  5. При ошибке — посмотреть логи и воспроизвести в браузере вручную.

Частые ошибки и их решения

  • Ошибка WebDriverException: убедитесь, что Chrome обновлён или используйте webdriver-manager.
  • TimeoutException при ожидании: увеличьте таймаут или проверьте доступность страницы.
  • PermissionError при записи файла: проверьте права на папку назначения.

Краткая методология поиска элемента (ментальная модель)

  1. Открыть страницу → 2. Найти элемент в DOM → 3. Проверить атрибуты (src, alt, class) → 4. Если src валиден — скачать.

Заключение

Selenium + Python — надёжный инструмент для автоматизации простых задач, таких как скачивание аватара Instagram. Для продакшн‑решений используйте webdriver-manager, явные ожидания и обработку ошибок. Учитывайте этические и правовые ограничения при работе с чужими данными.

Кратко повторим основные выводы:

  • Рабочий алгоритм: открыть профиль → найти → взять src → скачать.
  • Для стабильности используйте WebDriverWait и webdriver-manager.
  • Приватные профили и изменение классов — основные ограничения.

Важно: всегда проверяйте актуальность селекторов — Instagram часто меняет HTML и имена классов.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство