# click: нажать

> POST /v1/browser/click — нажать на элемент и получить состояние страницы после нажатия

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

Нажимает на элемент по его `ref` и ждёт, пока страница отреагирует. В ответ
приходит **состояние**, а не «ок».

**Цена:** 1 кредит за действие.

## Запрос

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

```python Python
res = requests.post(
    "https://api.parreq.com/v1/browser/click",
    headers={"Authorization": "Bearer pr_ВАШКЛЮЧ"},
    json={"session_id": session, "ref": "pq2-m8p2q"},
    timeout=180,
).json()

if res["navigated"]:
    print("ушли на", res["url"])
```

```javascript Node
const res = await fetch("https://api.parreq.com/v1/browser/click", {
  method: "POST",
  headers: {
    "Authorization": "Bearer pr_ВАШКЛЮЧ",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ session_id: session, ref: "pq2-m8p2q" }),
}).then((r) => r.json());

if (res.navigated) console.log("ушли на", res.url);
```

## Параметры

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

- **`ref`** (`string`, обязательно, body):
  Ссылка на элемент из последнего списка `elements`.

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

## Ответ

```json
{
  "clicked": {"ref": "pq2-m8p2q", "tag": "button", "text": "Войти"},
  "navigated": true,
  "url_before": "https://example.com/",
  "url": "https://example.com/account",
  "settled": {"settled": true, "reason": "страница догрузилась: 611 узлов…"},
  "elements": ["…"],
  "credits": 1
}
```

- **`clicked`** (`object`):
  На что вправду нажали: ссылка, тег и подпись. Проверка, что метка указывала на
  тот элемент, который вы имели в виду.

- **`navigated`** (`boolean`):
  Сменился ли адрес после нажатия.

- **`url_before`** (`string`):
  Адрес до нажатия.

- **`url`** (`string`):
  Адрес после. Совпадает с `url_before`, когда перехода не было.

- **`settled`** (`object`):
  Догрузилась ли страница после нажатия — см.
  [Догрузка страницы](https://docs.parreq.com/browser-settled).

- **`elements`** (`array`):
  Свежий список элементов. Прежние метки после перехода недействительны.

## Почему состояние, а не «ок»

По одному «ок» агент не отличил бы переход на новую страницу от кнопки, которая
ничего не сделала. А это разные случаи с разным продолжением:

| `navigated` | `settled` | Что это значит |
|---|---|---|
| `true` | `true` | Перешли и страница догрузилась — работайте со свежим списком |
| `true` | `false` | Перешли, но страница ещё менялась — список может быть неполным |
| `false` | `true` | Перехода не было: раскрылось меню, показалась ошибка формы |
| `false` | `false` | Нажатие запустило что-то долгое — например, подгрузку списка |

## Частые отказы

| Код | Что делать |
|---|---|
| `element_not_found` | Элемент исчез после перерисовки — возьмите свежий `elements` |
| `element_disabled` | Кнопка отключена: заполните обязательные поля и повторите |
| `session_not_found` | Сессия закрылась по простою или потолку — откройте новую |
| `tab_gone` | Вкладка закрылась под нами: сессия мертва, откройте новую |

Полный список — на странице [Ошибки](https://docs.parreq.com/browser-errors).
