Как собирать данные с сайтов вакансий с помощью инструментов агента OpenAI
TL;DR
Потребительский агент "Operator" от OpenAI был закрыт 31 августа 2025 года, а его преемник, агент ChatGPT, также был снят с производства в пользу ChatGPT Work в июле 2026 года — ни один из них не является инструментом для скребков, и ни один из них не предоставляет общедоступный API, к которому можно обращаться из вашего собственного кода.
Фактический путь, который можно построить для "скребка вакансий с помощью агента OpenAI", — это инструмент computer_use_preview в модели computer-use-preview, вызываемый через API ответов — он управляет реальным браузером через скриншоты и действия клика/ввода/прокрутки, а не считывает исходный код страницы.
Прежде чем обращаться к автоматизации браузера, проверьте, поддерживает ли целевая доска систему отслеживания заявок (Greenhouse, Lever, Ashby) с бесплатной, общедоступной, неаутентифицированной JSON-лентой вакансий — она возвращает структурированные данные напрямую и полностью обходит цикл агента.
Агент компьютерного использования является правильным инструментом только тогда, когда на доске нет публичной ленты и нет доступных структурированных данных JobPosting в HTML страницы, так как он медленнее, дороже за страницу и менее устойчив, чем прямой HTTP-запрос.
Скретчинг общедоступных вакансий подтвердил свою правомерность в рамках Закона о компьютерном мошенничестве и злоупотреблениях в судах США, но собственные Условия обслуживания доски могут создать отдельные риски за нарушение контракта, а обход обнаружения ботов или лимитов скорости создает отдельные юридические риски согласно законам о защите от обхода.
Направьте исходящий трафик браузера агента через ротационный пул жилых прокси, чтобы избежать блокировок IP-адресов дата-центров, и нормализуйте вывод каждой доски в одну общую схему (название, местоположение, URL, дата публикации, описание) перед тем, как сохранить его.
Введение
"OpenAI Operator" больше не относится к работающему продукту. OpenAI выпустила Operator как исследовательский предварительный браузерный агент 23 января 2025 года, ограничив его на старте подписчиками ChatGPT Pro, и закрыла его 31 августа 2025 года после интеграции его возможностей в более широкий режим "агента ChatGPT". Сам агент ChatGPT тоже не просуществовал долго: центр помощи OpenAI теперь ясно утверждает, что "агент ChatGPT больше не доступен. Используйте ChatGPT Work для более длительных, многоэтапных задач и завершенных поставок", согласно , которая была запущена в июле 2026 года как текущая пользовательская поверхность агента.
Ни один из этих трех продуктов — Operator, агент ChatGPT или ChatGPT Work — не предоставляет общедоступного API. Это функции интерфейса чата, которыми вы управляете, вводя запрос, а не что-то, что можно интегрировать в запланированную задачу, которая каждый утро вытаскивает вакансии в базу данных. Если вы хотите построить повторяемый конвейер, соответствующий элемент стека OpenAI — это инструмент использования компьютера в API ответов — возможность для разработчиков, которая выполняет ту же роль, что и Operator (смотрит на скриншот, решает, куда кликнуть или ввести текст, и повторяет это), но как API, который вы вызываете из своего собственного кода. Этот учебник строит скребок вакансий на основе этого инструмента и четко указывает на моменты, когда полный браузерный агент является неправильным инструментом для работы.
Почему вообще скребкить вакансии
Команды по набору кадров и исследованию рынка извлекают структурированные данные о вакансиях по нескольким повторяющимся причинам: отслеживание скорости найма конкурента по отделам, создание образца компенсации и инфляции должностей по сектору, пополнение инструмента поиска талантов свежими запросами или создание вертикального продукта для поиска вакансий, который агрегирует списки, которые обыкновенный поисковый движок не отображает должным образом. Все эти случаи требуют как минимум три поля — название, местоположение и стабильную ссылку на источник — плюс любые другие данные, полезные для конкретного применения (дата размещения, старшинство, возможность удаленной работы, диапазон зарплаты, если он раскрыт).
Агент браузера на базе ИИ оправдывает свои расходы конкретно на досках, которые отображают вакансии за heavy client-side JavaScript, ограничивают пагинацию за счет взаимодействия с бесконечной прокруткой или используют названия классов CSS, которые меняются при каждом развертывании, так как агент основывает свои решения на том, что он видит на экране, а не на фиксированном селекторе. Он является неправильным инструментом для доски, которая уже отвечает структурированным JSON по запросу — этот случай рассматривается в следующем разделе, и он как минимум быстрее и дешевле, чем запуск браузера вообще.
Выбор правильного подхода к извлечению
Перед написанием цикла агента потратьте пять минут, чтобы проверить, делает ли целевая доска это ненужным. Большинство страниц карьеры расположены на одной из нескольких систем отслеживания заявок (ATS), и несколько из крупнейших из них — Greenhouse, Lever, Ashby — предоставляют бесплатный, неаутентифицированный JSON-эндпоинт, который возвращает все открытые вакансии для данной компании. Общедоступный API доски вакансий Greenhouse, например, обрабатывает запрос GET https://boards-api.greenhouse.io/v1/boards/{board_token}/jobs без какого-либо API ключа, возвращая id, title, location, absolute_url и updated_at для каждой публикации, с необязательным параметром content=true, который добавляет полное описание вакансии. Если страница карьеры компании размещена на Greenhouse, этот эндпоинт является как более надежным, так и значительно дешевле, чем любой агент.
Вторая резервная опция находится на одном уровне ниже: многие страницы вакансий — включая те, которые не работают на известной ATS — встраивают блок schema.org/JobPosting в формате JSON-LD непосредственно в HTML страницы, в частности потому, что доски вакансий хотят, чтобы их объявления правильно отображались в функции поиска вакансий Google. Этот JSON-LD читаем для машин без визуализации в браузере; простой запрос HTTP GET и парсер HTML извлекают его. Обращайтесь к агенту компьютерного использования только после того, как убедитесь, что ни публичной ленты ATS, ни встроенных структурированных данных не существует — это сценарий, в котором страница действительно интерактивна (результаты, отрендеренные клиентом, постраничная навигация при прокрутке или форма поиска, которая должна быть заполнена перед отображением результатов) и скрипт, который просто запрашивает URL, не получает ничего полезного.
Быстрый обзор
Когда у доски нет публичной ленты, но при этом не требуется полная интерактивная автоматизация, Nstproxy Crawl может отрисовать JavaScript страницы и вернуть чистый Markdown или JSON из одного вызова API вместо сценария браузерного агента.
Учетная запись OpenAI с доступом к API Ответов и модели computer-use-preview — это отдельная возможность для разработчиков от потребительских планов ChatGPT и тарифицируется по токенам (3,00 доллара за 1 миллион входящих токенов, 12,00 долларов за 1 миллион выходящих токенов на момент написания) плюс плата за вызов инструмента; уточните актуальную стоимость на собственной странице тарифов OpenAI перед планированием производственного запуска.
Python 3.9+ с установленным requests или эквивалентный HTTP-клиент на вашем языке предпочтения.
Способ отрисовать и сделать скриншот страницы браузера и перевести действия модели обратно в реальные события ввода — руководство OpenAI ссылается на Playwright как на основную реализацию; кодовые образцы этого учебника предполагают браузер на основе Playwright.
Пул ротационных прокси для любого запуска, который касается более чем нескольких страниц, так как один IP-адрес, осуществляющий повторные автоматизированные запросы, является тем самым шаблоном, по которому обнаружение ботов для досок вакансий создается.
Пять минут с Условиями использования целевой доски и robots.txt — см. Наблюдения и ограничения ниже, прежде чем нацеливаться на конкретный сайт.
Шаг 1: Подтвердите, что нет публичной ленты для использования вместо этого
Начните с проверки страницы карьеры целевой компании на наличие известного паттерна ATS. Если URL страницы карьеры содержит greenhouse.io, lever.co или перенаправляется через один из этих доменов, попробуйте напрямую получить публичный эндпоинт вакансий доски:
Если это возвращает массив jobs, вы закончили извлечение — переходите к Шагу 4 и нормализуйте этот ответ вместо создания агента. board_token обычно является слугом компании, как он появляется в самом URL карьеры. Если эндпоинт возвращает 404, компания либо не находится на Greenhouse, либо использует другой токен, чем ее публичное название, и стоит быстро вручную проверить исходящие сетевые запросы страницы (через инструменты разработчика браузера) на наличие JSON API вызова, прежде чем приходить к выводу, что вам вообще нужен агент.
Шаг 2: Настройте цикл агента компьютерного использования
Если лента не существует, инициализируйте вызов API Ответов с инструментом computer_use_preview. Инструмент нуждается в фиксированной display_width и display_height, соответствующих тому, какой вид окна ваша Playwright браузер действительно отображает, и в environment, равном "browser":
from openai import OpenAI
client = OpenAI()# читает OPENAI_API_KEY из окруженияresponse = client.responses.create( model="computer-use-preview", tools=[{"type":"computer_use_preview",```json
"display_width":1024,"display_height":768,"environment":"browser",}],input=[{"role":"user","content":[{"type":"input_text","text":("Откройте страницу карьеры и перечислите все названия должностей, ""местоположение и URL публикаций, видимые без прокрутки."),}],}], truncation="auto",)
Модель ничего не выполняет сама — она возвращает объект computer_call, описывающий одно действие (например, click по координате, type с буквальным текстом, scroll и так далее). Ваш код отвечает за выполнение этого действия в реальном браузере с помощью Playwright, захват свежего скриншота и отправку его обратно в качестве computer_call_output, чтобы модель могла решить следующий шаг:
call = response.output[0]# объект computer_callaction = call.action # например, {"type": "click", "x": 512, "y": 384}run_action_in_playwright(action)# выполняем действие, затем захватываем свежий скриншотnext_response = client.responses.create( model="computer-use-preview", previous_response_id=response.id, tools=[{"type":"computer_use_preview","display_width":1024,"display_height":768,"environment":"browser",}],input=[{"call_id": call.call_id,"type":"computer_call_output","output":{"type":"input_image","image_url":f"data:image/png;base64,{screenshot_base64}",},}], truncation="auto",)
Этот обмен повторяется — действовать, делать скриншот, отправлять, читать следующее действие — пока не придет ответ без computer_call, что сигнализирует, что модель считает задачу законченной. Эта форма запроса/ответа иллюстрирует задокументированную схему, а не запись о выполнении капитального OpenAI-аккаунта в этой среде; рассматривайте имена переменных и точный порядок полей как подлежащие текущей справке по API перед отправкой, так как computer-use-preview все еще является моделью с меткой предварительного просмотра.
Шаг 3: Пагинация и поддержание состояния в ходе выполнения
Доски объявлений выполняют пагинацию тремя распространенными способами, и каждый требует различного условия цикла: пронумерованные страницы с контролем "дальше" (кликните его, сделайте скриншот, повторяйте, останавливайтесь, когда элемент управления исчезнет), бесконечная прокрутка (отправьте действие scroll, сделайте скриншот и остановитесь, когда два последовательных скриншота не дадут новых объявлений) или кнопка "показать больше" (кликните, дождитесь отрисовки нового DOM, сделайте скриншот). Поскольку агент видит только пиксели, отслеживайте дубликаты самостоятельно вне модели: хешируйте каждую извлеченную пару заголовок-плюс-URL и пропускайте все, что вы уже записали, так как агент, повторно просматривающий частично прокрученную страницу, в противном случае повторно сообщит об объявлениях, которые он уже перечислил.
Ограничьте каждую сессию жестким лимитом страниц и временным лимитом на часы. Цикл использования компьютера не имеет встроенного ощущения "на этом сайте 40 страниц, и это слишком много" — эта граница является ответственностью вашего кода, а не модели.
Шаг 4: Нормализация в стабильную выходную схему
Неважно, пришли ли данные из ATS JSON-ленты, блока JSON-LD или стенограммы агента, структурируйте их одинаково перед сохранением:
{"id":"8077887","title":"Инженер платформы данных","location":"Удаленно - США","url":"https://boards.example.com/jobs/8077887","updated_at":"2026-08-06T12:10:17-04:00","summary":"Создавайте и поддерживайте каналы обработки данных...","source":"greenhouse-api",# или "jsonld" / "computer-use-agent"}
Вот эта нормализация работает с живой JSON-точкой, возвращающей именно этот макет полей — используя локальное приспособление вместо реального хоста ATS, так как доступ к исходящей сети этой среды не достигает произвольных внешних доменов напрямую (сама схема была подтверждена в прямом эфире по общедоступному API Greenhouse):
Вывод: [{'id': 8077887, 'title': 'Инженер платформы данных', 'location': 'Удаленно - США', ...}, {'id': 8077888, 'title': 'Старший инженер, работа с обратной связью', 'location': 'Нью-Йорк, штат Нью-Йорк', ...}]
Этот код успешно выполнился против локальной установки с двумя образцами листингов, подтвердив логику парсинга в отношении реальных полей Greenhouse (id, title, location.name, absolute_url, updated_at, content) перед тем, как вы направите его на живую доску.
Шаг 5: Направьте запросы через меняющийся пул прокси
Единственный IP-адрес, отправляющий десятки автоматизированных запросов на одну доску за короткий промежуток времени, является точным признаком для систем обнаружения ботов, который настраивается на флажок, независимо от того, исходят ли эти запросы из простого цикла requests.get() или из браузера, управляемого агентом компьютерного использования. Для подхода к ATS-ленте это означает направление вашего HTTP-клиента через меняющийся пул; для агента компьютерного использования это означает запуск Playwright с прокси, настроенным в самом контексте браузера, так что каждую загрузку страницы — не только API-вызовы — получает с жилого IP-адреса, который меняется между сессиями.
Nstproxy Residential Prime Proxies идеально подходят для этой роли: они направляют трафик через реальные жилые IP-адреса по большой стране, что воспринимается системой управления рисками доски вакансий как обычный трафик браузинга, а не как сконцентрированные запросы из дата-центров. Для команд, у которых настоящим узким местом является сам этап извлечения, а не IP-адреса прокси — страницы, которым требуется рендеринг JavaScript, повторные попытки и чистый структурированный вывод без поддержания цикла Playwright/агента компьютерного использования вообще — Nstproxy Crawl стоит оценить как замену для Шагов 2 и 3 полностью на досках, которые не требуют интерактивной автоматизации. Crawl:
Рендерит JavaScript и возвращает чистый вывод — один API-вызов возвращает Markdown, очищенный HTML или скриншот, без необходимости запускать процесс браузера самостоятельно.
Функционирует с прокси по умолчанию — каждый запрос проходит через собственную инфраструктуру прокси Nstproxy с обработкой отпечатков браузера, охватывая проблему разнообразия IP-адресов, о которой идет речь в этом разделе.
Оплачивается за успешный запрос, а не за попытку — запрос, который получает реальный ответ (включая 404 или 403), оплачивается один раз; только сбой на стороне системы в получении чего-либо не тарифицируется, что делает стоимость предсказуемой для пакета карьерных страниц.
Crawl в настоящее время не выполняет извлечение полей на естественном языке так, как это делают некоторые конкуренты — вы все равно пишете нормализацию Шага 4 сами против возвращенного Markdown или HTML — но он снимает бремя оркестрации браузера для любой доски, где агент компьютерного использования был бы избыточен. Crawl API reference охватывает точную форму запроса и ответа как для одиночных страниц, так и для обходов на уровне сайта, а текущая цена подписки Crawl тарифицирует за успешный запрос, а не за попытку, что стоит проверить по сравнению с вашим ожидаемым объемом страниц перед тем, как привязываться к нему вместо самонастраиваемого цикла браузера. Объявление о запуске Crawl от Nstproxy охватывает полный набор функций, включая обход на уровне сайта и многопрофильный вывод, если этот конкретный случай использования выходит за пределы одиночных карьерных страниц.
Наблюдения и ограничения
Агент компьютерного использования медленный и дорогой относительно прямого запроса: каждое действие стоит поездки модели плюс загрузку полного разрешения скриншота, так что страница с 40 листингами с несколькими прокрутками может потребовать десятков API-вызовов, прежде чем у вас будут все ее данные. Соответственно планируйте бюджет и предпочитайте путь ATS-ленты или JSON-LD, когда это доступно — оставьте агента для досок, которые действительно требуют интерактивной навигации.
С юридической точки зрения, ситуация здесь более улажена, чем может показаться. В деле hiQ Labs против LinkedIn Девятый окружной суд дважды — по апелляции и по возвращению — постановил, что скрапинг данных, которые сайт сделал общедоступными, не нарушает Закон о компьютерном мошенничестве и злоупотреблениях, потому что CFAA направлен на несанкционированный доступ к непубличным системам, а не на автоматизированный сбор того, что любой уже может видеть в браузере. Это не делает скрапинг безрисковым: собственные Условия обслуживания доски могут независимо запрещать автоматизированный сбор, и нарушение этого соглашения создает отдельную возможность нарушить контракт даже в тех случаях, когда нет иска по CFAA. Более новый и, возможно, более острый риск заключается в законе об антиобходе — иске Reddit против Perplexity в 2025 году сосредоточен на заявлениях по DMCA § 1201 о обходе лимитов частоты, CAPTCHA и систем обнаружения ботов, что является другой юридической теорией, чем "были ли данные публичными." Прочитайте Условия обслуживания целевой доски перед тем, как запускать любой скрапер против нее, и рассматривайте "сайт установил CAPTCHA" как сигнал остановиться, а не как загадку для решения.
Объявления о вакансиях могут также содержать личные данные — прямо указанный адрес электронной почты или номер телефона рекрутера, встроенные в объявление, например — чтоTriggers обычные обязательства по защите данных (среди них GDPR), независимо от того, является ли сама страница публичной. Хранение контактных данных менеджера по найму в больших объемах без законных оснований для этого конкретного использования является материально отличной деятельностью от хранения должности и местоположения, и этот рабочий процесс не должен бездумно пересекать эту границу, захватывая больше контента объявления, чем фактически необходимо для использования.
Разметка и структура страницы на любом данном борде будут меняться без предварительного уведомления, и подход на основе агентов лучше терпит это, чем хрупкий скрипт CSS-селекторов — но оба подхода ухудшаются, если борд переключает поставщиков ATS или redesigns свою страницу карьеры, поэтому закладывайте бюджет на периодическую повторную проверку, а не на конвейер "установил и забыл".
Заключение
"Скрейпинг с помощью OpenAI Operator" описывает продукт, который больше не существует; реальный, построенный аналог сегодня — это инструмент computer_use_preview в модели computer-use-preview OpenAI, вызываемый через API Responses и в сочетании с вашей собственной автоматизацией браузера. Используйте его только после исключения публичной ленты ATS или встроенных структурированных данных JobPosting, так как оба варианта быстрее, дешевле и стабильнее, чем управление браузером. Какой бы метод извлечения вы ни выбрали, нормализуйте вывод в одну схему, явно ограничьте пагинацию, направляйте трафик через пул резидентных прокси или API рендеринга, такой как Nstproxy Crawl, чтобы избежать блокировок на основе IP, и прочтите Условия обслуживания целевого борда перед тем, как направить на него что-либо автоматизированное.
Часто задаваемые вопросы
В: Доступен ли OpenAI Operator для скрейпинга досок объявлений о работе?
Нет. Оператор был закрыт 31 августа 2025 года. Его преемник, агент ChatGPT, также был уволен — справочный центр OpenAI теперь направляет пользователей к ChatGPT Work. Ни Оператор, ни агент ChatGPT, ни ChatGPT Work не предоставляют публичный API; строительный аналог для пользовательского конвейера — это инструмент computer_use_preview в модели computer-use-preview в API Responses.
В: Нужен ли мне агент computer-use для каждой доски объявлений?
Нет. Сначала проверьте, работает ли доска на ATS с публичной JSON-лентой (Greenhouse, Lever и Ashby предлагают такую) или встраивает ли schema.org/JobPosting структурированные данные прямо в HTML страницы. Оба варианта быстрее, дешевле и стабильнее, чем управление браузером, и агент по использованию компьютера стоит дополнительных затрат и задержки только тогда, когда ни один из них не существует.
В: Законно ли скрейпить публично видимые объявления о вакансиях?
Суды США в деле hiQ Labs против LinkedIn постановили, что скрейпинг данных, которые сайт делает публично доступными, сам по себе не нарушает Закон о компьютерном мошенничестве и злоупотреблениях. Это не устраняет все юридические риски: Условия обслуживания борда могут отдельно запрещать автоматизированный сбор данных как вопрос контракта, и обход ограничений частоты или обнаружения ботов создает отдельную ответственность за обход. Ознакомьтесь с конкретными Условиями обслуживания доски перед ее скрейпингом, и рассматривайте это как решение для каждого сайта, а не как общий юридический факт.
В: Что произойдет, если доска объявлений изменит свою разметку страницы?
Агент по использованию компьютера лучше воспринимает изменения разметки и разметки, чем фиксированный скрипт CSS-селектора, поскольку он опирается на то, что визуально отображается на экране, а не на конкретном пути DOM. Он не очень хорошо справляется с миграцией ATS или полным редизайном сайта — закладывайте периодическую повторную проверку вашей логики извлечения, независимо от метода, который вы используете.
В: Сколько страниц или объявлений может это обработать одновременно?
Установите явное количество страниц и тайм-аут реального времени в вашем собственном коде; ни подход с ATS-лентой, ни цикл использования компьютера не обеспечивают адекватной точки остановки сами по себе. Для цикла агента в частности также удалите дублирующиеся извлеченные объявления по заголовку и URL, так как повторный прокрутка частично прочитанной страницы может заставить модель заново отчетить записи, которые она уже нашла.
В: Требует ли этот рабочий процесс прокси для функционирования?
Нет — код в этом уроке работает без него. Пул прокси становится необходимым, как только вы делаете повторные автоматизированные запросы к одной и той же доске в течение короткого временного окна, что является шаблоном, на который большинство систем обнаружения ботов досок объявлений настраиваются, независимо от того, приходят ли эти запросы от простого HTTP-клиента или от браузера, который управляет агент по использованию компьютера.
В: Может ли этот же подход извлекать информацию о зарплате и контактной информации из объявлений?
Технически да, если эти данные присутствуют на странице. Обращайтесь с ними осторожно: адрес электронной почты или номер телефона рекрутера в объявлении — это личные данные, подлежащие обычным правилам защиты данных (включая GDPR), даже если сама страница публичная, так что захватывайте и храните только те поля, которые нужны для вашего фактического случая использования.
Создайте настоящий открытый визуальный конструктор рабочих процессов для агентов ИИ: холст React Flow в сочетании с проверенным движком выполнения топологической сортировки, протестированным от и до с реальным захваченным результатом.
Ivy Lin
Aug. 24th 2026
110M+ реальных IP с 99.9% успешных доступов
Средний отклик ~0.5с для задач высокой конкуренции
Всего от $0.1/GB
Мгновенный доступ к премиальным residential, datacenter, IPv6 и ISP пулам.