Все ошибки приходят в общем формате раздела об ошибках: код, текст и признак retryable.

Коды

invalid_request приходит до похода в браузер и не списывает кредитов. Так же ведут себя отказы по правам и по балансу: платить за отказ нечестно, а тратить на него Chrome — глупо.

Что чинится само, а что доходит до вас

Переход прямо во время сборки мы переживаем сами: согласие на куки, определение города, уход на www, смена маршрута в одностраничном приложении. Сборка повторяется в новом документе, и до вас такой отказ не доходит вовсе. Доходит то, что повтором внутри шага не лечится. В таком случае в сообщении стоит текст самого браузера, а не название внутреннего исключения: по нему видно, чинить обращение или просто повторить.

Разбор частых случаев

Метки живут в пределах шага. Если между получением списка и нажатием страница перерисовалась, прежний ref уже ничего не значит.Берите список из последнего ответа и ищите элемент по подписи text или по name, а не по позиции в массиве.
Простой — 60 секунд. Если между вызовами стоит обращение к модели или ожидание пользователя, сессия успевает закрыться.Готовьте решение о следующем шаге заранее либо открывайте сессию непосредственно перед действием.
Ваша прошлая сессия ещё жива: без явного close она держит место до десяти секунд простоя.Закрывайте сессии в finally — см. close.
Форма ждёт обязательных полей. Посмотрите в списке элементов те, у которых required: true и пустой value.
Значит, дело не в случайности. В тексте ошибки стоит ответ браузера — по нему обычно видно, что страница требует чего-то, чего в сессии нет: авторизации, согласия, поддерживаемого устройства.Попробуйте другой device или gl.