Мы — быстрорастущая IT-компания, создающая цифровые продукты для крупного бизнеса. Мы уделяем особое внимание надежности и удобству использования, и нам нужен квалифицированный инженер по ручному контролю качества, который поможет поддерживать наши решения на высоком уровне. Обязанности: Тестировать веб‑ и мобильные приложения: выполнять функциональное, регрессионное, интеграционное и дымовое тестирование. Разрабатывать тест‑кейсы и чек‑листы с применением конкретных техник (например, эквивалентное разбиение, анализ граничных значений). Выявлять неоднозначности в требованиях на ранних этапах и обсуждать их с аналитиками и разработчиками. Регистрировать баги в Jira — с чёткими шагами воспроизведения, скриншотами или видеозаписями, логами и указанием степени серьёзности; отслеживать исправление дефектов до их закрытия. Проверять тестовые данные через базу данных (с помощью SQL) и через API (в Postman или Insomnia). Участвовать в ключевых активностях по методологии Agile: планировании спринтов, оценке задач, ретроспективах. Поддерживать тестовую документацию в актуальном состоянии в Confluence (или аналогичной системе). Требования: Опыт работы в ручном QA — 2–3 года (в продуктовой команде или в аутсорсинге). Подтверждённый опыт применения техник проектирования тестов и умение обосновывать выбранные подходы к покрытию. Хорошее понимание жизненного цикла разработки ПО (SDLC) и того, какую ценность QA вносит на каждом этапе. Практический опыт тестирования веб‑приложений (кроссбраузерное тестирование, работа с DevTools) или мобильных приложений (Android/iOS). Уверенное владение Jira, Confluence/YouTrack, базовые навыки работы с SQL (SELECT, JOIN, GROUP BY). Практические навыки тестирования API: работа с HTTP/REST, Postman/Insomnia, умение читать коды состояния и ответы сервера. Понимание клиент‑серверной архитектуры и принципов взаимодействия фронтенда и бэкенда. Навыки чёткой коммуникации: умение описывать проблемы и согласовывать приоритеты с командой. Условия: Конкурентоспособная зарплата. Возможность удаленной работы. Комфортная работа в вашем часовом поясе. Гибкий график. Профессиональный рост и развитие. Мультикультурная рабочая среда.
Мы ищем сильного инженера, который поможет нам построить и поддерживать масштабируемый движок для сбора данных — надёжный, предсказуемый и устойчивый к защитным механизмам сайтов. Это не про разовые скрипты: речь о промышленной системе, которая должна работать стабильно месяцами и годами, а при изменениях на целевых порталах — быстро и прозрачно восстанавливаться. Вам предстоит не только разрабатывать ядро и модули краулера, но и переносить существующие реализации с JVM, внедрять слой на базе ИИ для извлечения данных, а также обеспечивать качество данных и прозрачность работы системы. Ключевая особенность роли — значительная доля рутинного, но критически важного сопровождения: вы будете регулярно чинить сломавшиеся селекторы, разбираться в изменившихся потоках навигации и фиксировать нюансы работы отдельных порталов. Что нужно делать: Разработать ядро краулер-движка на Node.js/TypeScript. Реализовать оркестрацию запусков, загрузку модулей, логику повторных попыток и задержек (retries и backoff), контроль параллелизма и частоты запросов, обработку ошибок, работу с артефактами запусков и логированием. Создать набор подключаемых модулей (управление браузером, маршрутизация для обхода антибот-защиты, извлечение данных, пагинация, вывод результатов) и спроектировать декларативный формат описания источников — схему конфигурации и контракт выходной схемы, отделённые от параметров времени выполнения. Использовать проверенные готовые решения для типовых слоёв (автоматизация браузера, цикл обхода, механизмы скрытности), чтобы сосредоточить внутренние усилия на том, что действительно специфично для наших данных. Выстроить рабочий процесс для разработчиков: добавление источника, локальное тестирование, регистрация, планирование, мониторинг выполнения. Перенести поведение существующих краулеров с JVM без потери покрытия и точности на уровне полей, включая неописанные «костыли» и особенности отдельных порталов. Валидировать каждую миграцию по эталонному выводу, приоритизируя источники по частоте поломок, а не по алфавиту. Документировать особенности каждого портала в процессе переноса. Поддерживать работу действующих краулеров в ходе миграции: классифицировать и устранять сбои, чинить сломанные селекторы, адаптироваться к изменениям навигации, перемещённым порталам и новой логике пагинации. Участвовать в дежурствах по источникам, за которые вы отвечаете. Корректно различать типы сбоев: временные ошибки, изменения DOM, новая антибот-защита, стены авторизации, полное исчезновение портала — и вовремя эскалировать проблемы, которые нельзя решить инженерными методами. Работать с антибот-защитой в рамках закона и правил сервисов: проводить реверс-инжиниринг порталов через анализ сетевого трафика и недокументированных JSON-эндпоинтов, подбирать подходящий инструмент под каждый источник (обычный HTTP, headless-браузер, управляемый stealth-браузер, стратегия прокси, сервис CAPTCHA). Построить ИИ-слой для извлечения данных: реализовать извлечение на базе LLM с приоритетом схемы, с детерминированным фоллбэком на селекторы и циклом самовосстановления (обнаружение, диагностика, исправление, проверка) в жёстких рамках по количеству итераций и бюджету затрат, с контролем через верификацию схемы и сравнение с последним эталонным выводом. Регистрировать источники в платформе планирования и мониторинга, участвовать в нормализации данных перед записью в хранилище (сопоставление имён, дедупликация, идемпотентная запись, восстановление частичных запусков), расширять бэкенд-сервисы на Node.js и внутренний UI для отображения статуса краулеров Требования к кандидату: От 3 лет опыта в коммерческой разработке ПО. Не менее 1,5 лет разработки и поддержки краулеров/скраперов в продакшене на Node.js — это жёсткое требование: нужны примеры реально запущенных, расписанных по расписанию и поддерживаемых краулеров для сайтов, которые вы не контролируете. Опыт длительной поддержки краулеров в продакшене (не разовые скрипты и не проекты для одного сайта). Уверенное владение Node.js и TypeScript: асинхронные паттерны, контроль параллелизма и частоты запросов, обработка ошибок, повторные попытки и задержки. Практический опыт работы с Playwright и/или Puppeteer в продакшене: понимание компромиссов между headless и headful, работа с контекстами браузера, состоянием хранения, перехватом сетевого трафика. Знание инструментов для краулинга и парсинга в экосистеме Node (Crawlee, Cheerio или аналоги), а также умение выполнять низкоуровневый HTTP-скрапинг, когда браузер не нужен. Опыт работы с бэкенд-сервисами на Node и REST API, знание SQL-баз данных (PostgreSQL или аналог). Умение писать переиспользуемый код в стиле библиотеки: чёткие границы модулей, паттерны плагинов/стратегий, типизированные интерфейсы, версионированная конфигурация. Важно уметь показать пример, где несколько разовых решений были обобщены в единый движок. Практический опыт борьбы с антибот-системами: Cloudflare Bot Management, Imperva, reCAPTCHA v2/v3, Turnstile, лимитирование частоты запросов; понимание браузерного и TLS-фингерпринтинга, стратегий использования прокси, сохранения сессий, платформ управляемых stealth-браузеров. Умение вовремя понять, что решение с CAPTCHA не поможет, потому что проблема в другом. Практическое применение LLM для извлечения данных: структурированный вывод на основе схемы, проектирование промптов, валидация результатов, учёт стоимости токенов, понимание, когда LLM лучше селекторов, а когда — нет, и как защититься от «уверенных, но неверных» ответов. Инженерия качества данных: валидация схемы, тестирование по эталонам/снимкам и сравнение данных с предыдущими запусками, нормализация, нечёткое сопоставление имён, дедупликация, идемпотентная запись. Владение Git, навыки проведения код-ревью, понимание важности покрытия тестами, опыт работы с CI/CD, Docker, деплоем в облаке (предпочтительно AWS). Способность читать код на JVM для точного переноса логики. Рабочий уровень английского языка для ежедневной технической коммуникации с командой заказчика. Будет плюсом: Опыт миграции скрапинг-системы с одного языка/рантайма на другой без простоя. Опыт настройки краулеров на основе конфигурации или декларативного подхода, где источники — это данные, а не код. Знакомство с фреймворками для агентов или агентскими рабочими процессами (вызов инструментов, многошаговые циклы, участие человека в цикле) — LangGraph, Claude Agent SDK или аналоги; агентская автоматизация браузера (Browser Use, Stagehand); MCP-серверы. Знание управляемых платформ для скрапинга/извлечения данных (Firecrawl, Kadoa, ScrapeGraphAI, Apify) и коммерческих поставщиков данных как альтернативы скрапингу. Опыт извлечения данных из PDF и документов (OCR, извлечение таблиц, структурированный парсинг); опыт скрапинга порталов государственных органов США или публичных реестров. Понимание юридических аспектов скрапинга и границ правил использования сервисов: robots.txt, лимитирование частоты запросов, стены аутентификации, условия распространения данных. Опыт фронтенд-разработки (React) для внутреннего UI операций — приветствуется, но не является заменой требований к краулеру.