Scrape: извлечение элементов по CSS-селекторам
POST /v1/browser/scrape открывает страницу в headless Chromium, выполняет document.querySelectorAll для
каждого селектора и возвращает найденные элементы в JSON. Формат совместим с Browserless /scrape.
curl -X POST "https://proxy.seyka.ru/v1/browser/scrape" \ -H "Authorization: Bearer $SEYKA_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "url": "https://example.com", "elements": [{"selector": "h1"}, {"selector": "a[href]"}], "gotoOptions": {"waitUntil": "networkidle"} }'| Параметр | Тип | Описание |
|---|---|---|
elements |
array |
обязательный, минимум один объект {"selector": "…"}; подходит любой CSS-селектор |
url или html |
string |
адрес страницы или разметка — ровно одно из двух |
| остальные | — | общие параметры страницы: viewport, gotoOptions, waitForSelector, cookies и т. д. |
Для динамических каталогов дождитесь появления элементов, иначе выборка может оказаться пустой:
{ "url": "https://shop.example.com/catalog", "elements": [{"selector": ".product-card .price"}], "waitForSelector": {"selector": ".product-card", "timeout": 10000}, "bestAttempt": true}{ "data": [ { "selector": "h1", "results": [ { "html": "Example Domain", "text": "Example Domain", "attributes": [], "width": 600, "height": 38, "top": 133, "left": 340 } ] }, { "selector": "a[href]", "results": [ { "html": "More information...", "text": "More information...", "attributes": [{ "name": "href", "value": "https://www.iana.org/domains/example" }], "width": 135, "height": 18, "top": 265, "left": 340 } ] } ], "meta": { "requestedUrl": "https://example.com/", "finalUrl": "https://example.com/", "status": 200, "redirected": false, "redirectChain": [] }}data идёт в порядке селекторов запроса. Поля каждого совпадения:
| Поле | Описание |
|---|---|
html |
внутренний HTML элемента (innerHTML) |
text |
текстовое содержимое (textContent) |
attributes |
все атрибуты, массив {name, value} |
width, height, top, left |
размер и положение элемента в пикселях (getBoundingClientRect) относительно видимой области |
Селектор без совпадений даёт пустой results, а не ошибку.
Блок meta есть, когда запрос шёл по url (для html его нет):
| Поле | Описание |
|---|---|
requestedUrl, finalUrl |
исходный и конечный адрес |
status |
HTTP-код сайта |
redirected, redirectChain |
были ли редиректы и их цепочка: from, to, status |
botProtection |
{"kind": "redirect_challenge"}, если по пути встретилась и была пройдена антибот-проверка с куки — страница загрузилась, но краулеры поисковиков могут её не пройти |
Те же код и адрес приходят в заголовках X-Response-Code, X-Response-Status и X-Response-URL. Ошибки
загрузки — JSON с error, errorKind и code, см. ошибки Browser API.
Каждый вызов оплачивается по цене Scrape; кэша ответов нет (X-Cache: DISABLED). Цены — в
таблице цен.