При парсинге динамических веб-страниц с помощью Playwright и Python очень важно дождаться полной загрузки страницы, прежде чем пытаться извлечь данные. Вот несколько эффективных способов дождаться полной загрузки страницы в Playwright:
Используйте page.wait_for_load_state()
Самый простой способ – использовать page.wait_for_load_state()
API. Это ждет, пока страница не достигнет состояния «загрузки», что означает, что страница запустила свой load
мероприятие:
await page.goto("https://example.com")
await page.wait_for_load_state()
Вы также можете дождаться состояния «режим сети», которое ожидает отсутствия сетевых подключений в течение как минимум 500 мс:
await page.goto("https://example.com")
await page.wait_for_load_state("networkidle")
Подождите определенного селектора
Другой распространенный метод — дождаться появления на странице определенного селектора. Это указывает на то, что загрузилась определенная часть страницы:
await page.goto("https://example.com")
await page.wait_for_selector("div.loaded")
Возможно, вам придется проверить страницу и найти селектор, который появляется только после полной загрузки страницы.
Дождитесь завершения навигации
Вы также можете дождаться завершения загрузки самой навигации с помощью wait_for_navigation
:
await page.click("a.dynamic-page")
await page.wait_for_navigation()
Это приостановит выполнение до тех пор, пока событие навигации не завершится после щелчка по ссылке.
Установить тайм-аут
Рекомендуется установить тайм-аут во время ожидания, чтобы ваш скрипт не зависал, если условие никогда не выполняется:
await page.wait_for_selector("div.loaded", timeout=10000)
Это будет ждать до 10 секунд, прежде чем выдать ошибку, если селектор не появится.
Подождите между взаимодействиями
Чтобы избежать ошибок, ограничивающих скорость, используйте sleep()
чтобы добавить задержку между взаимодействиями:
await page.click("#submit")
await page.wait_for_navigation()
sleep(5) # wait 5 seconds
Это дает время для завершения предыдущего действия перед выполнением следующего действия.
Ключевым моментом в Playwright является использование правильных событий и селекторов для ожидания нужного вам состояния страницы. Используя вышеуказанные методы, вы можете дождаться загрузки страницы, прежде чем очищать ее или взаимодействовать со страницей.