# state: перечитать страницу

> POST /v1/browser/state — свежий список элементов в живой сессии, без единого действия на странице

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

Перечитывает страницу в открытой сессии, ничего на ней не нажимая. Возвращает то
же, что `open`: список элементов, текст, разметку — по заказу.

**Цена:** 1 кредит, как обычный шаг.

## Зачем это нужно

Бывает, что первый ответ приходит пустым: `elements_count: 0`, `text: ""`. Это не
всегда значит, что на странице ничего нет. Чаще значит, что сайт отдал каркас, а
содержимое приезжает сторонним виджетом — записью, картой, каталогом, — и к
моменту сборки оно ещё не поднялось.

Раньше такая сессия была тупиком: нажимать не на что, потому что ссылок `ref`
нет, а запросить список заново нечем. Единственным выходом оставался новый
`open` — то есть новая сессия, новый профиль и те же секунды ожидания сначала.

Теперь можно просто перечитать. Вкладка та же, куки те же, виджет за это время
успел подняться.

> **Совет.**
>   Вместе с `wait_for` это читается как «дождись вот этого блока и покажи, что
>   вышло»: `{"session_id": "…", "wait_for": ".booking-form", "wait_ms": 30000}`.

## Запрос

```bash cURL
curl -X POST "https://api.parreq.com/v1/browser/state" \
  -H "Authorization: Bearer pr_ВАШКЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{"session_id": "bs_9f2a41c7e8b0", "wait_for": ".booking-form", "wait_ms": 30000}'
```

```python Python
res = requests.post(
    "https://api.parreq.com/v1/browser/state",
    headers={"Authorization": "Bearer pr_ВАШКЛЮЧ"},
    json={"session_id": session, "wait_for": ".booking-form", "wait_ms": 30000},
    timeout=180,
).json()

print(res["elements_count"], "элементов;", res["settled"]["reason"])
```

## Параметры

- **`session_id`** (`string`, обязательно, body):
  Идентификатор сессии из `open`.

- **`include`** (`string`, по умолчанию `buttons,fields`, body):
  Что вернуть. Те же значения, что и в `open`.

- **`wait_ms`** (`integer`, body):
  Потолок ожидания догрузки на этом шаге, в миллисекундах, до 60000. По
  умолчанию — общий потолок службы.

- **`wait_for`** (`string`, body):
  CSS-селектор блока, которого ждём. Пока он не появится, ожидание не кончится —
  либо кончится по потолку, и тогда в `reason` будет прямо сказано, что блок так
  и не пришёл.

## Ответ

Тот же, что у `open`, минус `session_id` — он у вас и так есть: `url`, `steps`,
`idle_left`, `life_left`, `settled`, `elements`, `elements_count`, `credits`.

> **Внимание.**
>   Перечитывание не воскрешает закрытую сессию. Если простой или потолок жизни
>   уже вышли, придёт `session_not_found` — открывайте новую.

## Когда лучше открыть заново

Перечитывать имеет смысл, пока жива та же страница. Если после `open` прошло
больше минуты и виджет так и не поднялся, дешевле закрыть сессию и открыть
страницу заново с бо́льшим `wait_ms` — второй заход часто попадает в уже прогретый
кеш профиля.
