Комментарии
И что, какой результат, удалось заработать? Всё же год прошёл уже.
вместо sleep лучше использовать driver.implicitly_wait(), а еще должен есть метод который ждет до появления элемента на странице:

element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, «myDynamicElement»))

Это на питоне, но думаю смысл понятен
Делают. Есть puppeteer который подойдет для любой задачи. Конечно если не остается другого выхода кроме как использовать headless хромимум.
Это всё круто, но мне кажется, Selenium — крайняя мера. Я бы разбирал, какие запросы делаются, и повторял бы их. Просто Selenium — слишком жирно

Да, в идеальном мире это так. Но когда у цели навороченный ajax, с авторизацией юзера, хешированными куками, адаптацией под конкретный браузер, то очень часто бывает, что без браузера просто не обойтись. Более того часто даже очень легковесные старички-эмуляторы а ля PhantomJS не вывозят, приходится аж целый chrome с --headless заводить. А если антиддос сайта начнет еще и капчи показывать, то там все вообще весело получается.


Так что для универсальности решения Selenium все же потребуется.


З.Ы. Но Thread.Sleep(5000); — это да, очень криво. Есть же прямо на борту у Selenium намного лучше инструменты для таймингов.

У puppeteer для ноды, который работает похожим образом, есть методы для ожидания появления на странице конкретных элементов, например waitForSelector, это как по мне намного лучше чем Sleep(). Полагаю у селениума тоже есть подобное.
Динамические данные можно получать используя селекторы, например xpath. Однако надо дождаться полной загрузки страницы. Websocket'ы, по идее, можно перехватывать с помощью прокси-сервера, ибо через него проходит весь интернет-трафик.
Это всё понятно, а каким образом можно обходить 429 «Too many requests»? Вот это прям сильно тормозит.
В место Selenium использовать zennoposter с разными useragent и проксями
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.