open, и после click, и после fill — сервис
ждёт, пока страница догрузится. Итог ожидания приходит в поле settled.
Почему тишины в сети мало
Обычная проверка «сеть замолчала — значит готово» здесь не работает. Скрипт может дорисовывать уже загруженное, ничего при этом не запрашивая, и снаружи это неотличимо от готовой страницы: запросов нет, а содержимое ещё меняется. Поэтому смотрим три вещи разом:Состояние документа
Разобрана ли разметка —
readyState дошёл до interactive.Сетевые записи
Прекратились ли запросы страницы.
Изменения DOM
Перестало ли меняться дерево узлов.
Достаточно
interactive, а не complete, и это важно. complete наступает
после события load, то есть после последнего подресурса — счётчика, пикселя,
шрифта со стороннего домена. Одного недоступного хватает, чтобы load не
наступил никогда, а разметка при этом разобрана давно и кнопки на месте.
Ждать в такой ситуации нечего.Ранний выход по цели
Если вinclude заказаны buttons или fields, ожидание следит ещё и за тем,
сколько таких элементов на странице. Как только они найдены и их число не
меняется, ожидание кончается — не дожидаясь общей тишины.
Смысл простой: страница может крутить карусель, тикать часами и подгружать ленту
до самого потолка, но список кнопок от этого не изменится. Ждать полного покоя
ради того, что уже собрано, — значит платить временем ни за что.
В таком случае в reason стоит «нужные элементы собраны», а settled всё равно
true: вы получили то, за чем шли.
Что приходит
boolean
true — дождались; false — вышло время, а страница ещё менялась.string
Чем кончилось ожидание, человеческими словами: сколько узлов, сетевых записей
и изменений насчитано, либо по какому сроку остановились.
integer
Сколько миллисекунд ждали.
string
Состояние документа на момент выхода:
loading, interactive или complete.
Первое означает, что разметка ещё разбиралась, — тогда список элементов пуст
не потому, что их нет, а потому, что их ещё не разобрали.integer
Сколько узлов в документе. Полтора десятка — страница пустая; сотни и
тысячи — разобранная.
integer
Сколько заказанных элементов (кнопок и полей) насчитано в последнем опросе.
-1 — цель не заказана: в include нет ни buttons, ни fields.integer
Изменений DOM за время ожидания.
integer
Сетевых записей страницы.
Как читать settled: false
Разница важна: в первом случае вы получили всё, во втором — обрывок, и знаете
об этом. Список элементов в обрывке может быть неполным: кнопка, которую
дорисовывает скрипт, ещё не появилась.
Есть страницы, которые не успокаиваются никогда: бегущие строки, часы,
анимация, ленты с автообновлением. Для них
settled: false — норма, а не
поломка. Проверьте по elements: если нужный элемент на месте, работайте
дальше.Связанные страницы
Элементы и ссылки
Что делать, если элемент из списка исчез.
Ошибки
Когда
settled: false переходит в отказ page_error.
