VZVZ
26.01.2016, 04:11
Начну с начала.
Свое изучение столь перспективного направления, как разработка ботов (автоматических клиентов) для всяких-разных сайтов/сервисов, я в свое время, как и любая школота, начал с браузерных движков (WebBrowser - Internet Explorer и Awesomium).
Первыми камнями преткновения стали:
1) столь популярный ныне AJAX, который на многих сайтах динамически подгружал некий контент, и это нельзя было толком отследить, а значит, и получить этот контент
2) загрузка файлов в поля input type=file (через JS невозможно загрузить файл в такое поле, разве что методом тупого автокликинга, ну а каких-то особых средств для этого, движки не предоставляли (хотя теоретически вполне могли бы, мать их!))
Тогда я открыл для себя HTTP-сниффер (Fiddler - мой любимый), а затем и HTTP-запросы (надо сказать, запросы я открыл чуть ранее - работая с официальными API, вроде как у VK, но то знакомство было очень поверхностным, да и это уже совсем оффтоп, ибо мы говорим о тех сайтах, у которых подходящего API вообще нет).
Низкоуровневость этого подхода обеспечивает основные его плюсы (быстродействие, и универсальность - прокатывает для 99,99% всех сайтов), но она же и создает недостатки: трудоемкость и нестабильность-нестойкость к любым мерам по борьбе с ботами от админов.
Очень тяжело имитировать все заголовки, какие отправляет браузер (а иначе серверу очень легко бот отличить от браузера).
Порой сложно разобраться, какие точно отсниффенные запросы надо отправлять, а какие нет.
Также сложно иногда разобраться, как JS генерирует иные значения (и наладить алгоритм у себя).
И т.д.
В целом это приемлемо для многих случаев, поэтому отказываться от этого подхода я не собираюсь. Но каждой задаче - свой инструмент.
А есть задачи, где стабильность и быстрота написания - важнее быстродействия.
Возвращаться к простым браузерным движкам желания нет, потому к Selenium и PhantomJS сперва относился скептически.
Но очень подкупило то, что PhantomJS, оказывается, содержит те самые "особые средства" для загрузки файлов в input type=file, которые простые не-специальные движки (мать их!) не предоставляют!
И вот вопросы:
1) Загрузка файлов - ОК.
А можно ли с помощью PhantomJS также и отслеживать, перехватывать изменения в DOM-модели, которые вносит JS с AJAX-запросов?
Вроде там есть возможность перехватывать те запросы (пример кода в треде таки не помешает)))
А если надо отловить именно изменения в DOM? Mutation Events там работают? А может и для этого есть "особые средства"?
2) А как там дела у Selenium в плане загрузки файлов, отслеживания HTTP-запросов, изменений в DOM?
Свое изучение столь перспективного направления, как разработка ботов (автоматических клиентов) для всяких-разных сайтов/сервисов, я в свое время, как и любая школота, начал с браузерных движков (WebBrowser - Internet Explorer и Awesomium).
Первыми камнями преткновения стали:
1) столь популярный ныне AJAX, который на многих сайтах динамически подгружал некий контент, и это нельзя было толком отследить, а значит, и получить этот контент
2) загрузка файлов в поля input type=file (через JS невозможно загрузить файл в такое поле, разве что методом тупого автокликинга, ну а каких-то особых средств для этого, движки не предоставляли (хотя теоретически вполне могли бы, мать их!))
Тогда я открыл для себя HTTP-сниффер (Fiddler - мой любимый), а затем и HTTP-запросы (надо сказать, запросы я открыл чуть ранее - работая с официальными API, вроде как у VK, но то знакомство было очень поверхностным, да и это уже совсем оффтоп, ибо мы говорим о тех сайтах, у которых подходящего API вообще нет).
Низкоуровневость этого подхода обеспечивает основные его плюсы (быстродействие, и универсальность - прокатывает для 99,99% всех сайтов), но она же и создает недостатки: трудоемкость и нестабильность-нестойкость к любым мерам по борьбе с ботами от админов.
Очень тяжело имитировать все заголовки, какие отправляет браузер (а иначе серверу очень легко бот отличить от браузера).
Порой сложно разобраться, какие точно отсниффенные запросы надо отправлять, а какие нет.
Также сложно иногда разобраться, как JS генерирует иные значения (и наладить алгоритм у себя).
И т.д.
В целом это приемлемо для многих случаев, поэтому отказываться от этого подхода я не собираюсь. Но каждой задаче - свой инструмент.
А есть задачи, где стабильность и быстрота написания - важнее быстродействия.
Возвращаться к простым браузерным движкам желания нет, потому к Selenium и PhantomJS сперва относился скептически.
Но очень подкупило то, что PhantomJS, оказывается, содержит те самые "особые средства" для загрузки файлов в input type=file, которые простые не-специальные движки (мать их!) не предоставляют!
И вот вопросы:
1) Загрузка файлов - ОК.
А можно ли с помощью PhantomJS также и отслеживать, перехватывать изменения в DOM-модели, которые вносит JS с AJAX-запросов?
Вроде там есть возможность перехватывать те запросы (пример кода в треде таки не помешает)))
А если надо отловить именно изменения в DOM? Mutation Events там работают? А может и для этого есть "особые средства"?
2) А как там дела у Selenium в плане загрузки файлов, отслеживания HTTP-запросов, изменений в DOM?