# Browser API: живая вкладка

> Обзор: чем отличается от Fetch, из чего состоит и в каком порядке вызывается

Источник: https://docs.parreq.com/browser/

`/v1/browser` — это Fetch, у которого есть продолжение. Fetch забирает страницу
и закрывает вкладку; здесь вкладка живёт между вызовами, и следующий запрос
попадает в тот же браузер, с теми же куками и той же историей.

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

## Когда брать Browser, а когда Fetch

| Задача | Чем брать |
|---|---|
| Забрать страницу и уйти | [Fetch](https://docs.parreq.com/fetch) — дешевле и быстрее |
| Нажать, заполнить, посмотреть что вышло | Browser |
| Пройти многошаговую форму | Browser |
| Собрать сотню страниц по списку | Fetch: сессия здесь дороже и живёт минутами |

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

## Порядок работы

**1. Открыть**

    `POST /v1/browser/open` — заводит сессию и возвращает `session_id` вместе со
    списком элементов.

**2. Посмотреть, что на странице**

    В каждом ответе приходит `elements`: кнопки и поля с ссылкой `ref` на
    каждый.

**3. Действовать**

    `POST /v1/browser/click` или `POST /v1/browser/fill` — по одному действию за
    вызов. В ответ снова приходит состояние страницы.

**4. Закрыть**

    `POST /v1/browser/close`. Бесплатно и необязательно: сессия закроется и
    сама, по простою или по потолку.

## Страницы раздела

**[Инициализация](https://docs.parreq.com/browser-init)**
    Что происходит между вашим первым запросом и открытой вкладкой: слот пула,
    профиль, адрес выхода, эмуляция.

**[open](https://docs.parreq.com/browser-open)**
    Открыть страницу и завести сессию. Параметры, ответ, примеры.

**[Элементы и ссылки](https://docs.parreq.com/browser-elements)**
    Что такое `ref`, почему это не селектор и что заказывать в `include`.

**[click](https://docs.parreq.com/browser-click)**
    Нажать на элемент и получить состояние страницы после нажатия.

**[fill](https://docs.parreq.com/browser-fill)**
    Заполнить поле посимвольно и увидеть, что вправду в нём оказалось.

**[close](https://docs.parreq.com/browser-close)**
    Закрыть сессию досрочно и освободить слот.

**[state](https://docs.parreq.com/browser-state)**
    Перечитать страницу в живой сессии: свежий список элементов без действий.

**[sessions](https://docs.parreq.com/browser-sessions)**
    Сколько сессий открыто сейчас и сколько ещё можно открыть.

**[Догрузка страницы](https://docs.parreq.com/browser-settled)**
    Поле `settled`: получили вы всё или обрывок, и как это отличить.

**[Сроки жизни и куки](https://docs.parreq.com/browser-lifetime)**
    Простой, потолок, сколько сессий разом и что делается с куками.

**[Ошибки](https://docs.parreq.com/browser-errors)**
    Коды отказов, какие повторяются сами и что делать с каждым.

**[Цена](https://docs.parreq.com/browser-pricing)**
    Сколько кредитов стоит шаг и почему считаются шаги, а не время.

> **К сведению.**
>   Пять ручек и один порядок: `open` → смотрим `elements` → `click` или `fill` →
>   снова смотрим → `close`. Шестая, `sessions`, ничего не меняет — только
>   показывает, что открыто сейчас.
