open отвечает sessions_busy или занимает пять секунд,
здесь написано, почему.
Что происходит по шагам
1
Проверяется ключ и место в пуле
Сперва считаются живые сессии. Их потолок — четыре на весь сервис, и если
все заняты, дальше дело не идёт: приходит
sessions_busy с кодом 503 и
заголовком Retry-After. Ни браузер, ни профиль на этом шаге ещё не
трогаются, поэтому отказ приходит быстро и ничего не стоит.2
Берётся слот пула — вкладка настоящего Chrome
Слот — это запущенный браузер с закреплённым за ним адресом выхода. Он
берётся из общего пула с меткой
browser и выходит из него на всё время
жизни сессии: пока вы работаете, запросы Search и Fetch на этот профиль не
попадут.Это и есть главная причина, по которой Browser дороже Fetch. Fetch отдаёт
слот через секунды, сессия держит его минутами.3
Открывается пустая вкладка
Сначала
about:blank, а не ваш адрес. Пустая вкладка нужна, чтобы
настроить эмуляцию до того, как страница увидит браузер: подменять
устройство и язык после загрузки поздно — скрипты уже отработали.Не удалось открыть вкладку — приходит browser_busy, 503.4
Применяется эмуляция
По параметрам
device, gl и hl выставляются размер экрана, User-Agent,
язык интерфейса и часовой пояс. Адрес выхода уже выбран вместе со слотом и
соответствует стране из gl.5
Загружается ваша страница
Навигация идёт под таймаутом. Не уложилась или сорвалась — сессия тут же
закрывается, а вам приходит
navigation_failed с кодом 502 и текстом самого
браузера.6
Ожидание догрузки
После навигации ждём, пока страница успокоится: состояние документа, сетевые
записи и изменения DOM разом. Итог приходит в поле
settled — подробно об
этом в разделе Догрузка страницы.7
Сборка ответа
Со страницы снимается то, что заказано в
include: кнопки, поля, текст,
разметка. Каждому элементу проставляется метка ref, по которой вы будете к
нему обращаться.Сорвалась сборка — сессия снова закрывается здесь же. Идентификатора вы ещё
не получили, закрыть её вам было бы нечем, и до уборщика она держала бы
профиль и вкладку впустую.session_id. С этого момента вкладка
ваша и ждёт следующего шага.
Всё, что описано выше, — один вызов
open. Отдельной ручки «инициализировать»
нет намеренно: сессия без открытой страницы бесполезна, а держать её в таком
виде значило бы занимать слот пула ни за чем.Чем следующие шаги отличаются от первого
click и fill не заводят ничего заново: слот, профиль, адрес выхода и куки
уже на месте. Шаг — это действие, ожидание догрузки и новая сборка списка
элементов. Поэтому он и стоит в три раза дешевле open.
Что живёт между вызовами
Куки и хранилище
Всё, что сайт записал за время сессии, остаётся до её закрытия.
История вкладки
Переходы копятся в той же вкладке — сайт видит обычное поведение, а не
серию заходов с нуля.
Адрес выхода
Один и тот же на всю сессию. Смена IP посреди формы — верный способ
получить проверку.
Профиль браузера
Отпечаток не меняется между шагами: тот же экран, тот же язык, те же
шрифты.
Сколько это занимает
open — это навигация плюс ожидание догрузки, то есть обычно 2–8 секунд и
дольше на тяжёлых страницах. click и fill быстрее: навигации в них может не
быть вовсе.
Ставьте клиентский таймаут не меньше 180 секунд. Библиотеки для Python и Node
делают это сами.

