JavaScript затормозил Selenium для Python - PullRequest
0 голосов
/ 08 октября 2018

Итак, я хочу очистить веб-сайт, который использует JavaScript / AJAX для получения дополнительных результатов при прокрутке страницы вниз.Я использую Python 3.7 с Selenium Chrome, работающим без головы.Тем не менее, по мере продвижения процесса очистки вы получаете постоянно растущий объем кода, который замедляет работу моей машины, пока она не остановится.Даже простые операции, такие как -

code = driver.page_source

- растут и занимают несколько секунд.Я провел тест, чтобы увидеть, насколько выросла кодовая база, после нескольких сотен результатов она расширилась с начальной длины около полумиллиона символов до 25 миллионов символов - в 50 раз!У меня такой вопрос:

1) Есть ли какой-нибудь способ заставить Selenium удалить предыдущий код (аналогично тому, как вы можете удалить его в режиме Chrome «проверять элемент»), чтобы сохранить размер управляемым?

2) Или есть какое-то другое простое решение, которое я пропускаю?

1 Ответ

0 голосов
/ 08 октября 2018

Одним из предложений было бы посмотреть на запущенный javascript и выполнить что-то похожее на python, а не просто полагаться на селен.

Я не знаю, какой сайт вы делаете, нозвучит так, как будто он выполняет серию вызовов AJAX, загружает другую страницу и другую страницу результатов (images / posts / whwhat).

Обратный инжиниринг JS - он, вероятно, делает один и тот же вызов AJAX снова и снова, передаваяв параметре или два.Выясните, как JS вычисляет переданный параметр (это временная метка или идентификатор полученного «последнего» элемента и т. Д.)

Затем, вместо того, чтобы работать с селеном, используйте запросы Python, выполняяэквивалентный пост.Извлеките данные (вероятно, в формате json или html), проанализируйте их на предмет того, что вам нужно, и затем повторите.

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

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