Не весь контент DOM готов после waitUntil: 'domcontentloaded' - PullRequest
0 голосов
/ 01 января 2019

Возможно, я неправильно интерпретирую domcontentloaded , но я ожидаю, что все элементы будут доступны в это время, и у меня не должно возникнуть проблем с их запросами.

Рассмотрим следующее:

await page.goto(url, { waitUntil: 'domcontentloaded' });
const elements = await page.$$('#myId');

elements.length в этом случае равно 0, но если я дождусь селектора, прежде чем запрашивать, элементы теперь содержат элемент:

await page.goto(url, { waitUntil: 'domcontentloaded' });
await page.waitForSelector('#SignIn-emailInput'); // <-- this shouldn't be required
const elements = await page.$$('#myId');

Следует не ждатьUntil: 'domcontentloaded, потому что goto не разрешается, пока все элементы не будут готовы для запроса?Вместо этого вы ожидаете решения 'networkidle0' здесь или есть лучший способ узнать, когда все готово?

1 Ответ

0 голосов
/ 01 января 2019

domcontentloaded запускается, когда все элементы исходного HTML-кода для страницы были проанализированы и вставлены в DOM.Но это все, что вам говорит.Если элементы добавляются на страницу каким-либо другим способом, это может легко произойти после того, как domcontentloaded запустится.

У страниц есть много других способов добавления контента, таких как Javascript, который вставляет элементы напрямую или делает вызовы Ajax, а затемвставляет элементы после того, как Ajax-вызовы возвращают результаты.Все они могут завершиться после domcontentloaded.

Когда Javascript вставляет элементы, нет никаких стандартных событий, чтобы знать, когда это можно сделать, потому что это специфичный для страницы код, который может буквально делать что угодно.Чтобы выяснить, когда это будет сделано, как правило, требуется некоторая проверка кода на странице, чтобы выяснить, как вы можете определить, когда оно выполнит свою работу.В худшем случае вы должны опрашивать контент, пока не увидите некоторые элементы стража, которые указывают на то, что Javascript завершил свою работу.В лучших ситуациях вы можете более непосредственно подключиться к чему-то другому, что делает страница, чтобы знать, когда это будет сделано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...