К содержимому

Документация

Python SDK: Browser: открытие страницы

Браузер нужен для страниц с динамическим содержимым и действиями. Открытие синхронно; закрывайте страницу после работы.

Примеры являются фрагментами тела def run(ctx):. Все методы SDK синхронны, await не нужен.

Методы

open

ctx.browser().open(url, capture=None, captcha_hints=None, auto_captcha=True) -> BrowserPage

Аргумент Тип Обязателен Назначение
url str Да Разрешённый HTTP(S)-адрес источника.
capture list[str] | None Нет, default в сигнатуре Маски URL для захвата первоначальных сетевых ответов.

Результат: BrowserPage. Объект SDK: используйте его методы, не передавайте целиком в emit.

Открыть страницу в управляемом браузере.

page = ctx.browser().open(ctx.param('catalog_url'), ['*/api/products*'])
try:
    ctx.log('Browser page opened')
finally:
    page.close()

Ошибки и контекст выполнения

Все вызовы синхронны. Неверный аргумент или формат данных может вызвать ValueError/TypeError; отказ платформы или недоступность сервиса вызывает RuntimeError. Отсутствие элемента/значения даёт None либо пустой список только там, где это явно описано. Не превращайте любое исключение в пустой успешный результат. Методы внешних сервисов недоступны в преобразовании выгрузки; см. ограничения преобразований и среду.

Автоматическое прохождение CAPTCHA

Параметр auto_captcha необязательный, по умолчанию True. Передайте False, чтобы отключить автоматическое прохождение. При false платные задания автоматически не запускаются. Общие настройки, поддерживаемые типы проверок и квоты продолжают действовать. Выбор действует на всю браузерную сессию, включая следующие действия и чтение содержимого.

page = ctx.browser().open(url, auto_captcha=False)

CAPTCHA на своём агенте

Автоматический режим и отключение работают на агенте. Нужны браузер, связь с Akmelo и тариф с доступными агентами. Дополнительные ключи CAPTCHA настраивать не требуется. Проверки и стоимость относятся к пространству агента; локальное выполнение не делает их бесплатными.

Учебная форма Яндекс SmartCaptcha

На официальном демо можно проверить всю форму без регистрации. CAPTCHA обрабатывается автоматически; сценарий заполняет учебное имя и отправляет форму. Используйте тестовые значения.

page = ctx.browser().open('https://smartcaptcha.yandexcloud.net/demo', [], {'success_selector': '.greeting'})
try:
    page.type('#name', 'Training example')
    page.click('#smartcaptcha-demo-submit')
    page.wait_for('.greeting', 15000)
    ctx.log(ctx.dom(page.content()).text('.greeting') or '')
finally:
    page.close()

Заполненный smart-token означает готовность к отправке. Успех подтверждает только серверное приветствие с отправленным именем. Название CAPTCHA и новый пустой виджет рядом с приветствием не вызывают повторную оплату при чтении результата. Дополнительное визуальное задание обрабатывается в той же сессии до предела попыток; отмена и срок прогона останавливают цепочку. Неподдерживаемое задание или непринятый ответ остаётся ошибкой. На подключённом агенте работают те же методы SDK и hints.

Полный справочник CAPTCHA

SDK и REST API для CAPTCHA описывает все hints, значения по умолчанию, явный вызов, отключение, проверку результата, агенты, пределы и ошибки. Руководство пользователя и актуальные цены помогут настроить функцию и оплату.

Для выбора объектов используется kind: "yandex_image"; обычно тип определяется автоматически. image_selector указывает только картинку задания, instructions_selector порядок выбора, success_selector новый результат успешной операции. Список доменов целевых сайтов не нужен. Неизвестный вариант завершается ошибкой. Не запускайте бесконечные повторы при отказе.

Выбор объектов с явными селекторами

Замените примерные селекторы элементами своего источника. Оба селектора изображения должны указывать только картинки задания, а не всю страницу. Этот вариант нужен, если автоматического определения недостаточно.

page = ctx.browser().open(url, captcha_hints={
    "kind": "yandex_image",
    "image_selector": ".challenge-image",
    "instructions_selector": ".challenge-order",
    "submit_selector": ".challenge-submit",
    "success_selector": ".result",
})
try:
    page.wait_for(".result", 15000)
finally:
    page.close()