Python: от основ до автоматизации с Selenium и API

Комплексный курс, охватывающий базовый синтаксис Python, работу со структурами данных и автоматизацию веб-браузеров. Вы научитесь писать скрипты для парсинга, управлять браузером через Selenium и создавать функциональных чат-ботов.

1. Основы синтаксиса: переменные, типы данных, циклы и функции

Основы синтаксиса: переменные, типы данных, циклы и функции

Добро пожаловать в курс Python: от основ до автоматизации с Selenium и API. Это первая и фундаментальная статья, с которой начнется ваше погружение в мир программирования. Python сегодня — это не просто язык, это инструмент, который используют аналитики данных, веб-разработчики, специалисты по искусственному интеллекту и, конечно же, инженеры по автоматизации тестирования.

Почему мы выбрали Python? Он обладает чистым и понятным синтаксисом, который читается практически как обычный английский текст. Это позволяет новичкам быстро освоить базовые концепции и сразу перейти к практике.

!Сферы применения языка Python

В этой лекции мы разберем строительные блоки любой программы: как хранить данные, как принимать решения и как повторять действия.

Переменные: хранение информации

Представьте, что вы переезжаете и упаковываете вещи в коробки. Чтобы не забыть, что лежит внутри, вы наклеиваете на коробку стикер с надписью «Книги» или «Посуда». В программировании переменная — это и есть такой стикер, который ссылается на определенное значение в памяти компьютера.

В Python создание переменной происходит максимально просто. Вам не нужно заранее объявлять, какой тип данных будет в ней храниться (это называется динамическая типизация). Вы просто придумываете имя и присваиваете значение с помощью знака равно =.

Здесь user_name, age и is_student — это имена переменных.

Правила именования

Чтобы ваш код был понятен вам и вашим коллегам, важно соблюдать правила:

  • Имя переменной может содержать буквы, цифры и знак подчеркивания _.
  • Имя не может начинаться с цифры.
  • Нельзя использовать зарезервированные слова (например, if, for, class).
  • В Python принято использовать стиль snake_case: слова пишутся маленькими буквами и разделяются подчеркиванием (например, my_first_variable).
  • > Читаемость кода важнее, чем скорость его написания. Код пишется один раз, а читается десятки раз.

    Типы данных

    Компьютер должен понимать, с чем он работает: с числом, текстом или логическим утверждением. В Python существует несколько основных типов данных, с которыми вы будете сталкиваться постоянно.

    Числа (Integers и Floats)

    Python отлично справляется с математикой. Существует два основных типа чисел:

    * int (Integer) — целые числа. Например: 5, -10, 42. * float (Floating point) — числа с плавающей точкой (дробные). Например: 3.14, 2.5, -0.01.

    Разделителем дробной части всегда является точка, а не запятая.

    Строки (Strings)

    Строка — это последовательность символов. В Python строки заключаются в одинарные ' ' или двойные " " кавычки. Разницы между ними для интерпретатора нет, главное — не смешивать их (начать с одной, а закончить другой).

    Одной из самых мощных функций при работе со строками являются f-строки (formatted strings). Они позволяют встраивать значения переменных прямо внутрь текста.

    Логический тип (Boolean)

    Этот тип данных имеет всего два возможных значения: True (Истина) и False (Ложь). Они часто являются результатом сравнения и используются для управления ходом программы.

    Обратите внимание: True и False в Python пишутся с большой буквы.

    Таблица основных типов

    | Тип | Название в Python | Пример | | :--- | :--- | :--- | | Целое число | int | 100 | | Дробное число | float | 99.9 | | Строка | str | "Python" | | Логический | bool | True |

    Условные операторы: принятие решений

    Программы редко бывают линейными. Обычно нам нужно выполнять разные действия в зависимости от ситуации. Например: «Если элемент на странице найден, кликнуть по нему, иначе — выдать ошибку».

    Для этого используется конструкция if - elif - else.

    Важность отступов

    В Python отступы (индетация) — это не просто вопрос красоты, это часть синтаксиса. Блок кода, который должен выполниться при истинности условия, обязан быть сдвинут вправо. Стандарт — 4 пробела.

    Если вы забудете отступ, программа выдаст ошибку IndentationError.

    !Блок-схема работы условного оператора

    Операторы сравнения

    * == — равно (не путать с =, которое присваивает значение) * != — не равно * > — больше * < — меньше * >= — больше или равно * <= — меньше или равно

    Циклы: повторение действий

    Автоматизация — это, по сути, повторение действий. Если вам нужно обработать 1000 файлов или проверить 50 ссылок на сайте, вы не будете писать код 50 раз. Вы используете цикл.

    Цикл for

    Цикл for используется, когда мы знаем количество повторений или хотим перебрать элементы в наборе данных (например, символы в строке).

    Часто используется функция range(), которая генерирует последовательность чисел.

    Если нужно пройтись по строке:

    Цикл while

    Цикл while выполняется до тех пор, пока условие истинно. С ним нужно быть осторожным: если условие никогда не станет ложным, вы получите «бесконечный цикл», и программа зависнет.

    В контексте Selenium и автоматизации while часто используется для ожидания появления элемента на странице (например: «ждать, пока кнопка не станет активной»).

    Функции: переиспользование кода

    Когда ваш код разрастается, в нем начинают появляться повторяющиеся куски. Чтобы избежать дублирования и хаоса, мы упаковываем логику в функции.

    Функция — это именованный блок кода, который выполняет определенную задачу. Вы определяете его один раз, а вызываете сколько угодно.

    Анатомия функции

    Для создания функции используется ключевое слово def.

    Разберем по частям:

  • def — объявление функции.
  • greet_user — имя функции (правила именования те же, что и у переменных).
  • (name) — параметр (аргумент), который функция принимает на вход.
  • return — ключевое слово, которое возвращает результат работы функции обратно в программу.
  • Вызов функции

    Если функция не имеет return, она вернет специальное значение None (пустота).

    Зачем нужны функции в автоматизации?

    Представьте, что в вашем тесте нужно 10 раз залогиниться на сайте. Вместо того чтобы 10 раз копировать код ввода логина и пароля, вы пишете одну функцию login(username, password) и вызываете её в нужных местах. Если дизайн сайта изменится, вам придется поправить код только в одном месте — внутри функции.

    Практический пример: простая логика бота

    Давайте объединим полученные знания. Напишем функцию, которая решает, стоит ли запускать тест, основываясь на времени суток и доступности сервера.

    В этом примере мы использовали: * Переменные в аргументах. * Типы данных (bool и int). * Условия (if, not, else). * Функцию с возвращаемым значением.

    Заключение

    Сегодня мы заложили фундамент. Переменные, типы данных, циклы и функции — это алфавит языка Python. Невозможно написать сложный автотест или API-клиент, не понимая этих основ.

    В следующей статье мы перейдем к более сложным структурам данных: Спискам и Словарям. Они позволят нам хранить наборы данных, например, список товаров из интернет-магазина или параметры конфигурации для тестов.

    Практикуйтесь, экспериментируйте с кодом и не бойтесь ошибок — именно на них учатся лучшие программисты.

    2. Структуры данных и файловая система: списки, словари и модули

    Структуры данных и файловая система: списки, словари и модули

    В предыдущей лекции мы научились создавать переменные для хранения одиночных значений: чисел, строк или логических состояний. Но что делать, если нам нужно сохранить список из ста ссылок для парсинга или базу данных пользователей с логинами и паролями? Создавать сто отдельных переменных (link1, link2, link3...) — это путь в никуда.

    Сегодня мы переходим на следующий уровень и разберем структуры данных. Это контейнеры, которые позволяют организованно хранить большие объемы информации. Также мы научимся работать с файловой системой и подключать внешние модули, что станет основой для наших будущих автотестов.

    Списки (Lists): Порядок и последовательность

    Список в Python — это упорядоченная коллекция элементов. Представьте себе железнодорожный состав: у каждого вагона есть свой порядковый номер, и вагоны следуют строго друг за другом. В Python списки создаются с помощью квадратных скобок [].

    Индексация: Как достать элемент?

    Самое важное правило, которое нужно запомнить: нумерация в программировании начинается с нуля.

    * Первый элемент имеет индекс 0. * Второй элемент — индекс 1. * И так далее.

    !Визуализация прямой и обратной индексации в списках

    Python также поддерживает отрицательную индексацию. Индекс -1 обращается к последнему элементу списка, -2 — к предпоследнему. Это очень удобно, когда вы не знаете точную длину списка, но вам нужен последний элемент.

    Изменение списков

    Списки — это изменяемый (mutable) тип данных. Мы можем добавлять, удалять или заменять элементы после создания списка.

  • Добавление: Метод .append() добавляет элемент в конец списка.
  • Удаление: Метод .remove() удаляет элемент по значению, а .pop() — по индексу.
  • В автоматизации списки используются повсеместно: например, чтобы собрать все заголовки товаров на странице и проверить их соответствие поисковому запросу.

    Словари (Dictionaries): Ключ к данным

    Если список — это вагоны с номерами, то словарь — это гардероб в театре или камера хранения. Чтобы получить свою вещь, вам не нужно знать, где именно она лежит физически, вам нужно лишь предъявить номерок (ключ).

    Словарь хранит данные в формате Ключ: Значение (Key: Value). Ключи должны быть уникальными. Словари создаются с помощью фигурных скобок {}.

    Работа со словарем

    Доступ к данным осуществляется не по индексу (0, 1, 2), а по ключу.

    Если вы попытаетесь обратиться к несуществующему ключу, Python выдаст ошибку. Чтобы этого избежать, используют метод .get(), который возвращает None (или заданное значение по умолчанию), если ключ не найден.

    Почему словари важны для API и Selenium?

    Словари в Python структурно почти идентичны формату JSON, который является стандартом передачи данных в веб-разработке. Когда вы будете отправлять запросы к API или получать конфигурацию теста, вы будете работать именно со словарями.

    !Сравнение структуры хранения данных в списках и словарях

    Кортежи (Tuples): Защита от изменений

    Существует еще один тип данных, похожий на список — кортеж. Он создается с помощью круглых скобок ().

    Главное отличие: кортеж нельзя изменить после создания. Вы не можете добавить или удалить из него элементы. Это полезно для хранения данных, которые должны оставаться константами, например, список дней недели или конфигурационные настройки сервера.

    Модули: Не изобретайте велосипед

    Сила Python — в его экосистеме. Вам не нужно писать код для вычисления квадратного корня, генерации случайных чисел или работы с временем — всё это уже написано и упаковано в модули.

    Чтобы использовать код из другого файла или библиотеки, используется ключевое слово import.

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

    Python поставляется с богатой стандартной библиотекой («батарейки в комплекте»).

    Пример 1: Случайные числа (random) В автотестах часто нужно генерировать случайные email-адреса или выбирать случайный товар.

    Пример 2: Время (time) Иногда скрипту нужно сделать паузу (хотя в профессиональном Selenium лучше использовать «умные ожидания», о которых мы поговорим позже).

    Импорт конкретных функций

    Если вам не нужен весь модуль, а только одна функция, можно использовать конструкцию from ... import ....

    В будущем мы будем точно так же импортировать библиотеку Selenium: from selenium import webdriver.

    Работа с файлами: Чтение и запись

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

    В Python работа с файлами состоит из трех этапов:

  • Открытие файла.
  • Чтение или запись.
  • Закрытие файла.
  • Контекстный менеджер with

    Раньше программистам приходилось вручную закрывать файлы командой .close(). Если они забывали это сделать или программа падала с ошибкой до закрытия, файл мог повредиться или заблокировать память.

    Python решил эту проблему с помощью конструкции with. Она автоматически закрывает файл, как только блок кода завершен.

    Запись в файл

    Обратите внимание на encoding="utf-8". Это важно для корректного отображения кириллицы.

    Чтение из файла

    Также существует режим 'a' (append), который позволяет дописывать информацию в конец файла, не стирая старое содержимое. Это идеально подходит для логов.

    Итерация по структурам данных

    В прошлой лекции мы изучили циклы. Теперь мы можем объединить их со списками и словарями.

    Перебор списка:

    Перебор словаря: При переборе словаря цикл по умолчанию идет по ключам. Чтобы получить и ключи, и значения, используют метод .items().

    Заключение

    Мы разобрали фундаментальные инструменты хранения данных. Списки позволяют работать с последовательностями, словари — со структурированными данными, а файлы и модули связывают ваш код с внешним миром.

    В следующей статье мы перейдем к самой захватывающей части курса — Установке Selenium и первому запуску браузера. Мы напишем скрипт, который сам откроет сайт и выполнит действия за вас.

    Подготовьтесь: теория заканчивается, начинается настоящая магия автоматизации.

    3. Введение в Selenium: управление браузером, навигация и ввод данных

    Введение в Selenium: управление браузером, навигация и ввод данных

    Добро пожаловать в самую зрелищную часть нашего курса! До этого момента мы работали с «черным ящиком» — писали код, который выполнял вычисления где-то в недрах процессора и выдавал результат в консоль. Сегодня всё изменится.

    Мы начинаем работать с Selenium — инструментом, который позволяет вашему Python-скрипту «взять в руки» мышку и клавиатуру. Вы напишете программу, которая сама откроет браузер, зайдет на сайт, введет данные и нажмет нужные кнопки. Это магия автоматизации, которую можно увидеть своими глазами.

    Что такое Selenium и как он работает?

    Selenium WebDriver — это библиотека, которая позволяет управлять браузером через код. Изначально она создавалась для тестирования веб-приложений (чтобы не прокликивать сайты вручную перед каждым релизом), но сегодня её используют для самых разных задач: от сбора данных (парсинга) до автоматизации рутины (например, автоматическая отправка отчетов).

    Архитектура WebDriver

    Важно понимать, что Python не управляет браузером напрямую. Chrome или Firefox — это сложные программы со своими защитными механизмами. Чтобы ими управлять, нужен посредник — Драйвер.

    Схема работы выглядит так:

  • Ваш код на Python отправляет команды (например, «открой google.com»).
  • WebDriver (специальный файл-драйвер, например, chromedriver.exe) получает эти команды и переводит их на язык, понятный браузеру.
  • Браузер выполняет действие.
  • !Как Python управляет браузером через посредника WebDriver

    Установка и настройка окружения

    Для начала работы нам понадобятся две вещи: сама библиотека Selenium и менеджер драйверов. Раньше драйверы нужно было скачивать вручную и прописывать пути в системе, но сейчас мы будем использовать современный подход с библиотекой webdriver-manager.

    Откройте терминал и выполните команду:

    Теперь всё готово к написанию первого скрипта.

    Ваш первый робот: Hello World в браузере

    Давайте напишем скрипт, который просто откроет браузер и перейдет на сайт Python.org.

    Разберем ключевые команды: * webdriver.Chrome(...) — эта команда запускает новое окно браузера Google Chrome. С этого момента переменная driver — это ваш пульт управления. * driver.get(url) — команда открыть указанную ссылку. Скрипт будет ждать, пока страница полностью загрузится, прежде чем переходить к следующей строке кода. * driver.quit()очень важная команда. Она закрывает все окна браузера и завершает процесс драйвера. Если её забыть, у вас в оперативной памяти останутся висеть «зомби-процессы».

    > Важно: Существует метод driver.close(), который закрывает только текущую вкладку. Метод driver.quit() закрывает весь браузер. Для завершения работы скрипта всегда используйте quit().

    Поиск элементов на странице

    Чтобы кликнуть по кнопке или ввести текст, нам нужно сначала объяснить роботу, где именно находится этот элемент. Для этого используются локаторы.

    Веб-страница состоит из HTML-тегов. У тегов есть атрибуты (id, class, name). Selenium умеет искать элементы по этим признакам.

    Для начала импортируем класс By, который содержит стратегии поиска:

    Основной метод поиска — driver.find_element(By.СТРАТЕГИЯ, "ЗНАЧЕНИЕ").

    Основные стратегии поиска

  • By.ID — самый надежный и быстрый способ. ID на странице должен быть уникальным.
  • By.NAME — поиск по атрибуту name (часто используется в формах).
  • By.CLASS_NAME — поиск по классу. Будьте осторожны: классов с одинаковым именем может быть много, Selenium вернет первый найденный.
  • By.XPATH — самый мощный, но сложный способ. Позволяет найти элемент по его пути в структуре HTML. Используется, когда нет ID или уникальных классов.
  • By.CSS_SELECTOR — поиск с использованием синтаксиса CSS. Быстрее, чем XPath, и часто лаконичнее.
  • !Структура HTML-элемента и его атрибуты для поиска

    Взаимодействие с элементами

    Найти элемент — это полдела. Теперь с ним нужно что-то сделать. У найденного элемента (объекта WebElement) есть свои методы.

    Ввод текста

    Метод .send_keys("текст") имитирует нажатие клавиш на клавиатуре.

    Если в поле уже был текст, новый текст допишется в конец. Чтобы этого избежать, часто используют метод .clear() перед вводом.

    Клики

    Метод .click() имитирует нажатие левой кнопкой мыши.

    Получение данных

    Иногда нам нужно не ввести данные, а прочитать их (например, проверить цену товара). Для этого используется свойство .text.

    Навигация и управление окном

    Selenium позволяет управлять самим браузером, как если бы вы нажимали кнопки на панели инструментов.

    * История браузера:

    * Размер окна: Часто сайты меняют верстку в зависимости от размера окна (мобильная/десктопная версия). Чтобы убедиться, что все элементы видны, лучше развернуть окно на весь экран.

    Практика: Автоматический поиск в Википедии

    Давайте соберем все знания в один скрипт. Наша задача:

  • Открыть Википедию.
  • Найти поле поиска.
  • Ввести запрос «Python».
  • Нажать Enter (да, Selenium умеет нажимать спецклавиши!).
  • Проверить, что мы перешли на нужную статью.
  • Разбор новых моментов

  • Keys.RETURN: Мы импортировали модуль Keys, который содержит коды специальных клавиш (Enter, Esc, стрелки, F1-F12). Это позволяет эмулировать нажатие клавиш, которых нет в тексте.
  • try...finally: Это конструкция обработки исключений. Если во время выполнения скрипта произойдет ошибка (например, интернет отключится), программа сразу перейдет в блок finally и закроет браузер. Это правило хорошего тона.
  • Распространенные ошибки новичков

  • Браузер открывается и сразу закрывается.
  • Это нормальное поведение. Скрипт выполняется очень быстро. Как только Python доходит до конца файла, программа завершается, и сборщик мусора закрывает соединение с браузером. Чтобы увидеть результат, используйте time.sleep() в конце (для обучения) или запускайте скрипт в режиме отладки.

  • Element not found (NoSuchElementException).
  • Самая частая ошибка. Она означает, что Selenium не смог найти элемент по указанному локатору. Причины: * Локатор указан неверно (опечатка в ID). * Страница еще не успела загрузиться, а скрипт уже ищет элемент. * Элемент находится внутри iframe (вложенного окна).

    Заключение

    Сегодня вы сделали огромный шаг — от написания кода, который «живет» в консоли, к коду, который взаимодействует с реальным веб-интерфейсом. Вы научились запускать браузер, искать элементы по ID и имени, кликать по кнопкам и вводить текст.

    Однако, использование time.sleep() для ожидания загрузки страницы — это ненадежный путь. Интернет может работать медленнее, и ваш тест упадет. В следующей статье мы разберем профессиональный подход: Парсинг данных и использование умных ожиданий (Waits), которые заставят скрипт ждать ровно столько, сколько нужно.

    Попробуйте запустить пример из статьи и поэкспериментировать с другими сайтами. Удачи в автоматизации!

    4. Продвинутый парсинг: работа с прокси, ожиданиями и извлечением данных

    Продвинутый парсинг: работа с прокси, ожиданиями и извлечением данных

    В предыдущей статье мы научились открывать браузер, нажимать на кнопки и вводить текст. Это база, без которой невозможно представить автоматизацию. Однако, если вы попробуете применить эти знания на реальных современных сайтах — маркетплейсах, социальных сетях или новостных агрегаторах — вы, скорее всего, столкнетесь с проблемами.

    Скрипт будет падать с ошибкой «Элемент не найден», хотя вы видите его на экране. Сайт заблокирует доступ после десятого запроса. Данные будут загружаться динамически, и ваш код не успеет их прочитать.

    Сегодня мы превратим вашего робота из неуклюжего новичка в профессионального ниндзя. Мы разберем три столпа продвинутого парсинга: умные ожидания, массовое извлечение данных и маскировку через прокси.

    Проблема time.sleep() и почему от него нужно отказаться

    В прошлом уроке мы использовали time.sleep(5), чтобы подождать загрузку страницы. В реальной разработке это считается дурным тоном и называется «жестким ожиданием» (hard wait).

    Представьте, что вы договорились встретиться с другом. Жесткое ожидание — это когда вы приходите на место и стоите ровно 15 минут с закрытыми глазами, независимо от того, пришел друг раньше или опаздывает.

    * Если сайт загрузился за 1 секунду, ваш скрипт будет ждать еще 4 секунды впустую. На масштабе тысячи страниц это часы потерянного времени. * Если сайт завис и грузится 6 секунд, скрипт упадет с ошибкой, так как попытается найти элемент раньше времени.

    Нам нужен механизм, который ждет ровно столько, сколько нужно. Как только элемент появился — мы действуем.

    Стратегии ожидания в Selenium

    Selenium предлагает два типа «умных» ожиданий: неявные (Implicit) и явные (Explicit).

    Неявные ожидания (Implicit Waits)

    Это глобальная настройка для драйвера. Вы говорите браузеру: «Если не можешь найти элемент сразу, подожди N секунд, прежде чем выдавать ошибку».

    Плюсы: Легко настроить (одна строка кода). Минусы: Работает только на появление элемента в коде страницы. Если элемент есть в коде, но он невидим или перекрыт другим окном, implicitly_wait не поможет, и клик не сработает.

    Явные ожидания (Explicit Waits)

    Это золотой стандарт автоматизации. Мы заставляем драйвер ждать наступления конкретного события (условия) для конкретного элемента.

    Для этого используются класс WebDriverWait и модуль expected_conditions (сокращенно EC).

    !Визуализация процесса периодической проверки условия в явных ожиданиях

    Пример: ждать, пока кнопка не станет кликабельной.

    Самые популярные условия expected_conditions:

    * presence_of_element_located — элемент просто появился в HTML-коде (но может быть невидим). * visibility_of_element_located — элемент виден пользователю (имеет высоту и ширину). * element_to_be_clickable — элемент виден и готов к клику (не перекрыт, не заблокирован). * text_to_be_present_in_element — внутри элемента появился нужный текст.

    Использование явных ожиданий делает ваши тесты стабильными и быстрыми.

    Массовое извлечение данных

    Часто нам нужно не просто кликнуть одну кнопку, а собрать информацию о 50 товарах на странице: названия, цены и ссылки.

    Метод find_element возвращает первый найденный элемент. Для поиска всех подходящих элементов используется метод find_elements (во множественном числе). Он возвращает список (list) веб-элементов.

    Пример парсинга списка товаров

    Представим, что у нас есть интернет-магазин, где каждый товар лежит в блоке с классом product-card.

    Извлечение атрибутов (ссылки и картинки)

    Текст элемента мы получаем через свойство .text. Но как получить ссылку, на которую ведет кнопка, или адрес изображения? Они хранятся в атрибутах HTML-тегов (href, src, data-id).

    Для этого используется метод .get_attribute("имя_атрибута").

    Работа с динамическим контентом и исключениями

    Современные сайты построены на JavaScript (React, Vue, Angular). Это значит, что элементы могут перерисовываться прямо в процессе работы скрипта.

    Одна из самых частых и неприятных ошибок — StaleElementReferenceException (Ошибка устаревшей ссылки на элемент).

    Почему она возникает?

  • Вы нашли элемент и сохранили его в переменную button.
  • Страница немного обновилась (например, подгрузился новый контент).
  • Вы пытаетесь нажать button.click().
  • Selenium говорит: «Этого элемента больше нет в памяти, страница изменилась».
  • Как лечить? Нужно найти элемент заново перед взаимодействием.

    Маскировка: Прокси и User-Agent

    Если вы начнете отправлять слишком много запросов с одного IP-адреса, сайт может заподозрить неладное и заблокировать вас (ошибка 403 Forbidden или капча).

    Чтобы избежать этого, нужно менять «личность» вашего бота.

    User-Agent

    User-Agent — это строка, которую браузер отправляет серверу. В ней написано: «Я — Google Chrome версии 120, работаю на Windows 10». По умолчанию Selenium может отправлять агент, в котором есть слово "Headless" или другие маркеры бота.

    Мы можем подменить его на обычный пользовательский.

    Прокси-серверы (Proxy)

    Прокси — это посредник между вами и сайтом. Сайт будет думать, что запрос пришел не с вашего компьютера, а из Германии, США или другой локации прокси-сервера.

    !Схема работы прокси-сервера как посредника, скрывающего реальный IP-адрес

    Для настройки прокси в Selenium также используются опции Chrome.

    > Важно: Бесплатные прокси часто работают медленно или уже заблокированы. Для серьезных проектов используются платные приватные прокси.

    Практический пример: Парсер заголовков новостей

    Давайте объединим всё изученное. Напишем скрипт, который заходит на новостной сайт, ждет загрузки статей и сохраняет их заголовки и ссылки.

    Заключение

    Теперь ваш инструментарий значительно расширился. Вы умеете:

  • Ждать загрузки элементов, не замедляя скрипт лишними паузами.
  • Собирать данные списками, а не поштучно.
  • Извлекать скрытые атрибуты (ссылки, картинки).
  • Маскироваться под обычного пользователя.
  • Эти навыки — основа для создания сложных ботов, способных работать 24/7. В следующей части курса мы отойдем от браузера и научимся работать с API — способом общаться с серверами напрямую, минуя медленный интерфейс сайтов. А также попробуем создать своего первого чат-бота.

    5. Практическая разработка: создание чат-ботов и взаимодействие с API

    Практическая разработка: создание чат-ботов и взаимодействие с API

    Поздравляю! Вы прошли долгий путь от переменных и циклов до управления настоящим браузером с помощью Selenium. В предыдущих статьях мы научили компьютер видеть веб-страницы так, как их видит человек. Но есть один нюанс: имитация действий человека — это медленно. Браузер тратит ресурсы на загрузку картинок, рекламы и стилей, которые вашему скрипту совершенно не нужны.

    Сегодня мы переходим на уровень профессиональной разработки. Мы научимся общаться с серверами напрямую, минуя визуальный интерфейс. Мы разберем, что такое API, как получать данные за миллисекунды и как создать своего собственного Telegram-бота, который объединит все ваши знания в готовый продукт.

    Что такое API и зачем оно нужно?

    API (Application Programming Interface) — это программный интерфейс приложения. Если говорить проще, это набор правил, по которым одна программа может общаться с другой.

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

    !Аналогия работы API: Клиент делает запрос, API передает его серверу, сервер возвращает результат

    В мире веба:

  • Selenium — это как если бы вы зашли на кухню и начали сами искать ингредиенты.
  • API — это когда вы просто передаете официанту записку с заказом и сразу получаете результат.
  • Формат данных JSON

    Когда программы общаются друг с другом, они должны говорить на одном языке. Самый популярный язык общения в современном вебе — это JSON (JavaScript Object Notation).

    Хорошая новость: вы уже знаете его! Структура JSON практически идентична словарям (dict) и спискам (list) в Python, которые мы изучали во второй статье.

    Библиотека requests: швейцарский нож для интернета

    В Python для работы с API стандартом де-факто является библиотека requests. Она позволяет отправлять запросы на сервер одной строчкой кода.

    Установим её:

    Типы запросов (HTTP Methods)

    Существует несколько основных типов действий, которые мы можем совершить:

    * GET — «Дай мне данные». Самый частый запрос. (Пример: узнать погоду, получить список товаров). * POST — «Возьми данные». (Пример: отправить сообщение, загрузить фото, авторизоваться).

    Практика: Получаем курс Биткоина

    Давайте напишем скрипт, который узнает текущую цену криптовалюты, используя бесплатный API от CoinGecko. Нам не нужно открывать браузер, искать поле поиска и парсить HTML. Мы просто отправим запрос по специальной ссылке.

    Разбор ключевых моментов

  • bot.infinity_polling(): Эта команда запускает «вечный двигатель» бота. Пока скрипт запущен на вашем компьютере, бот будет отвечать. Если вы выключите компьютер или остановите скрипт, бот «уснет».
  • try...except: Работа с сетью всегда непредсказуема. Сервер может упасть, интернет может отключиться. Блок try защищает вашего бота от падения. Если произойдет ошибка, бот не вылетит, а просто отправит сообщение об ошибке.
  • bot.reply_to: В отличие от send_message, этот метод отправляет ответ с цитированием сообщения пользователя. Это удобно в чатах.
  • Куда двигаться дальше?

    Поздравляю! Вы завершили курс «Python: от основ до автоматизации». Вы прошли путь от print("Hello World") до создания собственного полезного инструмента.

    Ваш арсенал теперь включает: * Основы языка: переменные, циклы, функции, структуры данных. * Selenium: умение автоматизировать любые действия в браузере. * API и Requests: умение быстро получать данные из сети. * Telegram Bots: умение создавать интерфейсы для своих программ.

    Что изучать дальше?

  • Базы данных (SQL): Сейчас ваш бот забывает всё после перезагрузки. Чтобы хранить историю переписки или настройки пользователей, вам понадобится база данных (например, SQLite или PostgreSQL).
  • Асинхронность (asyncio): Библиотека telebot, которую мы использовали, работает синхронно (по очереди). Для создания высоконагруженных ботов используют асинхронные библиотеки, такие как aiogram.
  • Git и GitHub: Чтобы сохранять версии своего кода и работать в команде.
  • Деплой (Deploy): Чтобы бот работал 24/7, его нужно запустить не на ноутбуке, а на удаленном сервере (VPS).
  • Программирование — это бесконечный процесс обучения. Главное — не останавливайтесь на теории. Придумайте задачу, которая интересна лично вам (бот для учета расходов, парсер цен на авиабилеты, автоматизатор отчетов по работе) и попробуйте её реализовать. Удачи!