Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Минусы Selenium/WebDriver, как парсер на JAVA, в каком направлении двигаться?

selenium
webdriver
java
Теги: #<Tag:0x00007f7b629a5198> #<Tag:0x00007f7b629a5058> #<Tag:0x00007f7b629a4f18>

(Vladislav Zolotaryov) #1

Здравствуйте! В программировании новичок, однако написал для своих нужд несколько парсеров и ботов для рассылки сообщений посредством Selenium/WebDriver однако понимаю, что данные технологии используются для тестирования, и приходилось иногда обрабатывать ошибки, чтобы программа не завершалась, а шагала дальше увидев ошибку.
Каковы минусы использования данной технологии в написании ботов и парсеров?
Что будет по скорости быстрее, в каком направлении двигаться?


(Nik Sidorenko) #2

Не совсем понятен вопрос. Точнее совсем не понятен.
Selenium/WebDriver - это инструмент управления Web-браузером.
Что Вы имеете ввиду под словом “парсер”? Что Вы пытаетесь “парсить”?
Для рассылки сообщений проще использовать любой почтовый клиент. Например, javax.mail.
Для написания ботов Вам нужно изучать программирование на любом удобном для Вас языке.

Чтобы понять нужет Вам Selenium/WebDriver или нет, нужно сначало понять Вашу цель и какую проблему/задачу Вы пытаетесь решить.


(Bolatbek) #3

Основной минус - затраты времени на старт драйвера и браузера, нельзя распараллелить.

Парсер удобно писать на скриптовых языках = тот же Python.


(Bolatbek) #4

Человек увидел, что с помощью вебдрайвера легко получить вебэлемент. Понравилось, хочет парсить на нем.


(Nik Sidorenko) #5

Если задача предполагает, что нужно что-то найти на веб-странице, то в этом случае WebDriver бесспорно крут. А затраты на старт браузера можно минимизировать используя headless (без UI-йные) браузеры. Типа, PhantomJS или HTMLUnit. Только если на страницах используется Javascript, надо сначала убедиться, что последние версии этих браузеров его поддерживают.


(Bolatbek) #6

А если надо парсить в несколько потоков тысячи страниц?


(Nik Sidorenko) #7

Давайте не будем высказывать догадки и предположения.
Чтобы не быть голословным, я поэтому сначала и спросил, какую цель GoldenScrew преследует и какую задачу пытается решить.


(Bolatbek) #8

Отказано.
Это открытый форум. Могу и догадки высказывать. Или это запрещено правилами?


(asolntsev) #9

Попробуйте JSoap. Он умеет парсить странички вообще без браузера - соответственно, гораздо быстрее и надёжнее.


(Vladislav Zolotaryov) #10

К JSoup Я и пришёл, прочитав разные возможности, мне в теории он понравился, в отличии от SAX и DOM.
0. Я правильно понимаю, Вы имели JSoup, а не JSoap?

  1. Часто для получения информации нужно подгружать Cookies, выполнять определённые действия по нажатию определённых кнопок, которые как правило сейчас взаимодействуют с JS, что заменит здесь селениум?
  2. Компилированные программы на селениум выходят ажно по 30МБайт, плюс ещё драйверы к браузеру. Во сколько будет меньше программа использующая JSoup?
  3. Отсутствия многопоточной работы это огромный минус для селениум, во сколько потоков можно пускать тот же самый JSoup?
  4. Я понял, что потеряю времени порядка 10 секунд на старт драйвера, но в дальнейшем к примеру найти элемент и кликнуть по нему слишком ли явные отличия будут Селениума от JSoup или подобных?
  5. Всё же, кто пишет парсеры на JAVA, а также ботов рассылки по личным сообщениям и тоу подобных, на чём Вы пишите, что используете? Другие языки программирования не предлагать.

(Yury) #11

Самый большой минус - временные затраты на работу парсера. Парсер, напрямую работающий с запросами/ответами сайта, всегда будет работать быстрее даже самого headless браузера.

Самый большой плюс - не нужно заморачиваться с разбором внутренностей сайта, кукисами, ответами сервера и прочим “матаном”. Разработка бота на вебдрайвере как правило проходит гораздо быстрее.


(Yury) #12

Нормальный скрапер/парсер и заменит. Конечно, не всегда, бывают исключения, но в подавляющем большинстве случаев можно обойтись обработкой и анализом стандартных запросов/ответов.

Вы ограничены только возможностями вашей инфраструктуры.

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

Все же рискну предложить python + requests. По-моему это уже стандарт в парсинге, как селениум в тестинге :slight_smile:


(asolntsev) #13

@GoldenScrew
У меня прям много непоняток.

  1. Да, JSoup
  2. Если нужно нажимать кнопки и запускать JS, то проще всё-таки использовать вебдрайвер.
  3. Что за цифра? Откуда 30MB? Ну и в любом случае, почему это проблема? Фиг с ним, пусть будет 30, какая разница? Вы же не на дискетах свой бот собираетесь распространять?
  4. Откуда данные? Конечно же, вебдрайвер можно запускать в нескольких потоках. Просто нужно на каждый поток свой вебдрайвер создать.
  5. Да, кроме этих 10 секунд других потерь не будет. Кстати, советую использовать chromedriver - тогда будет явно меньше 10 секунд.

(Vladislav Zolotaryov) #14
  1. Вот сам сделал экспорт уже пару программ в .jar и даже простейшая программа Hello World, с кодом в пару строк уже составляет 3 Мбайта) А те, что используют селениум сразу 30Мбайт… :frowning: А это уже в десять раз выше разтраты ресурсов.
  2. Каждый вебдрайвер, к примеру ChromeDriver весит порядка 5Мбайт, а при запуске тратит около 1МБайта оперативной памяти 1000 потоков и средний пользовательский компьютер работать будет на пределе, а то думаю и меньше.
  3. Предыдущий комментарий утверждает, что буду терять время при каждом запросе. И думаю он прав, так как тот же самый хромдрайвер, хоть он и быстрее, тянет за собой огромное количество всякого рода контента плюс нагружает компьютер выполнением всякой анимации, яваскриптов, и всего того, что не отключено и не нужно для парсинга в данный момент.