Python SDK: BrowserPage: действия на странице
Страницу возвращает ctx.browser().open(url). Действия выполняются синхронно. После клика или перехода дождитесь новых данных; всегда вызывайте close() в finally.
Примеры являются фрагментами тела def run(ctx):. Все методы SDK синхронны, await не нужен.
Как получить объект
page = ctx.browser().open(ctx.param('catalog_url'))
try:
page.wait_for('.product')
ctx.log('HTML loaded', {'length': len(page.content())})
finally:
page.close()
Методы
goto()click()type()scroll()wait_for()hover()scroll_to()select()press()content()screenshot()close()capture_responses()responses()wait_for_response()
goto
page.goto(url) -> BrowserPage
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
url |
str |
Да | Разрешённый HTTP(S)-адрес источника. |
Результат: BrowserPage. Объект SDK: используйте его методы, не передавайте целиком в emit.
Перейти на другой URL в той же браузерной странице.
result = page.goto(ctx.param('next_url'))
click
page.click(selector, timeout_ms=5000) -> BrowserPage
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
selector |
str |
Да | CSS-селектор элемента. |
timeout_ms |
int |
Нет, default в сигнатуре | Таймаут ожидания в миллисекундах. |
Результат: BrowserPage. Объект SDK: используйте его методы, не передавайте целиком в emit.
Нажать на первый элемент по селектору.
result = page.click('button.next', 5000)
type
page.type(selector, text) -> BrowserPage
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
selector |
str |
Да | CSS-селектор элемента. |
text |
str |
Да | Текст для разбора, поиска или ввода. |
Результат: BrowserPage. Объект SDK: используйте его методы, не передавайте целиком в emit.
Ввести текст в найденное поле.
result = page.type('input.search', 'cable')
scroll
page.scroll(times=1, delay_ms=500) -> BrowserPage
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
times |
int |
Нет, default в сигнатуре | Максимальное число шагов прокрутки. |
delay_ms |
int |
Нет, default в сигнатуре | Пауза между шагами прокрутки, миллисекунды. |
Результат: BrowserPage. Объект SDK: используйте его методы, не передавайте целиком в emit.
Прокрутить страницу вниз несколькими шагами с паузами.
result = page.scroll(2, 500)
wait_for
page.wait_for(selector, timeout_ms=10000) -> BrowserPage
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
selector |
str |
Да | CSS-селектор элемента. |
timeout_ms |
int |
Нет, default в сигнатуре | Таймаут ожидания в миллисекундах. |
Результат: BrowserPage. Объект SDK: используйте его методы, не передавайте целиком в emit.
Дождаться появления элемента по селектору.
result = page.wait_for('.product', 10000)
hover
page.hover(selector, timeout_ms=5000) -> BrowserPage
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
selector |
str |
Да | CSS-селектор элемента. |
timeout_ms |
int |
Нет, default в сигнатуре | Таймаут ожидания в миллисекундах. |
Результат: BrowserPage. Объект SDK: используйте его методы, не передавайте целиком в emit.
Навести указатель, чтобы раскрыть меню или подсказку: page.hover('.catalog-menu');.
result = page.hover('.catalog-menu', 5000)
scroll_to
page.scroll_to(selector, timeout_ms=5000) -> BrowserPage
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
selector |
str |
Да | CSS-селектор элемента. |
timeout_ms |
int |
Нет, default в сигнатуре | Таймаут ожидания в миллисекундах. |
Результат: BrowserPage. Объект SDK: используйте его методы, не передавайте целиком в emit.
Прокрутить страницу до конкретного элемента: page.scroll_to('.product-card');.
result = page.scroll_to('.product', 5000)
select
page.select(selector, value, timeout_ms=5000) -> BrowserPage
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
selector |
str |
Да | CSS-селектор элемента. |
value |
Any |
Да | Значение по назначению метода; см. описание результата. |
timeout_ms |
int |
Нет, default в сигнатуре | Таймаут ожидания в миллисекундах. |
Результат: BrowserPage. Объект SDK: используйте его методы, не передавайте целиком в emit.
Выбрать значение обычного списка: page.select('select.city', 'perm');.
result = page.select('select.city', 'perm', 5000)
press
page.press(selector, key, timeout_ms=5000) -> BrowserPage
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
selector |
str |
Да | CSS-селектор элемента. |
key |
str | None |
Да | Ключ записи, состояния, объекта или входа по назначению метода. |
timeout_ms |
int |
Нет, default в сигнатуре | Таймаут ожидания в миллисекундах. |
Результат: BrowserPage. Объект SDK: используйте его методы, не передавайте целиком в emit.
Нажать клавишу в элементе: page.press('input.search', 'Enter');.
result = page.press('input.search', 'Enter', 5000)
content
page.content() -> str
Аргументы не нужны.
Результат: str.
Получить текущий HTML после действий браузера.
result = page.content()
screenshot
page.screenshot() -> str
Аргументы не нужны.
Результат: str.
Сохранить изображение текущей страницы.
result = page.screenshot()
close
page.close() -> None
Аргументы не нужны.
Результат: None. Метод не возвращает значение данных.
Освобождает открытую страницу. Вызывайте в finally, даже если предыдущее действие завершилось ошибкой.
result = page.close()
capture_responses
page.capture_responses(patterns) -> BrowserPage
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
patterns |
list[str] |
Да | Список URL-масок захвата; пустой список отключает захват. |
Результат: BrowserPage. Объект SDK: используйте его методы, не передавайте целиком в emit.
Начать захват XHR/fetch по маскам полного URL. До 20 масок, до 1024 символов каждая. Новая настройка очищает старый буфер, [] отключает захват. Уже прошедшие запросы не восстанавливаются: для первого открытия используйте второй аргумент browser().open().
result = page.capture_responses(['*/api/products*'])
responses
page.responses() -> dict[str, Any]
Аргументы не нужны.
Результат: dict[str, Any].
Возвращает ответы сети, захваченные через capture_responses(). Содержимое доступно после соответствующих действий на странице.
result = page.responses()
wait_for_response
page.wait_for_response(pattern='*', timeout_ms=10000) -> dict[str, Any] | None
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
pattern |
str |
Нет, default в сигнатуре | Регулярное выражение либо URL-маска по назначению метода. |
timeout_ms |
int |
Нет, default в сигнатуре | Таймаут ожидания в миллисекундах. |
Результат: dict[str, Any] | None.
Ожидает ответ сети, соответствующий шаблону. Задавайте ограниченный таймаут и проверяйте результат None.
result = page.wait_for_response('*/api/products*', 10000)
Ошибки и контекст выполнения
Все вызовы синхронны. Неверный аргумент или формат данных может вызвать ValueError/TypeError; отказ платформы или недоступность сервиса вызывает RuntimeError. Отсутствие элемента/значения даёт None либо пустой список только там, где это явно описано. Не превращайте любое исключение в пустой успешный результат. Методы внешних сервисов недоступны в преобразовании выгрузки; см. ограничения преобразований и среду.
solve_captcha
page.solve_captcha(hints=None) -> BrowserPage
Пройти поддерживаемую проверку сайта. Обычно она обрабатывается автоматически.
page.solve_captcha({"success_selector": ".loaded-products"})
Элемент успеха должен появиться после проверки. Для настроек до перехода используйте ctx.browser().open(url, captcha_hints={"success_selector": ".product-card"}). Отдельная квота проверок, без токенов AI. Неизвестный тип и неподтверждённый доступ вызывают ошибку. Секретный ключ сайта вводить нельзя.
Полный справочник CAPTCHA
SDK и REST API для CAPTCHA описывает все hints, значения по умолчанию, явный вызов, отключение, проверку результата, агенты, пределы и ошибки. Руководство пользователя и актуальные цены помогут настроить функцию и оплату.
Для выбора объектов используется kind: "yandex_image"; обычно тип определяется автоматически. image_selector указывает только картинку задания, instructions_selector порядок выбора, success_selector новый результат успешной операции. Список доменов целевых сайтов не нужен. Неизвестный вариант завершается ошибкой. Не запускайте бесконечные повторы при отказе.
Для yandex_text параметр answer_selector указывает поле текстового ответа, если оно не определилось автоматически. Полный контракт hints приведён в справочнике CAPTCHA API.