2015-08-05 7 views
0

Я работаю с командой, единственным способом получить пользователя в базе данных своей компании, является перемещение и заполнение примерно 5 страниц веб-форм в браузере. Поистине жестокий материал. Я разработал сценарии веб-автоматизации в VBScript, Java (w/Selenium WebDriver) и iMacro, но все эти решения: slow. Они также зависят от браузера, от которого я пытаюсь уйти.Автоматизация запросов HTTP

Я ищу новую платформу, возможно, какую-то технику/язык скриптов, которые позволят мне отправлять HTTP-запросы и читать ответы HTTP, а затем строить там свой сценарий. Сценарий будет выполнять вычисления в ответах HTTP, использовать File I/O и использовать эти данные для выпуска дополнительных HTTP-запросов. Опять же, я просто spitballing здесь. Если у кого-то еще есть лучшее решение, я все уши!

Мой вопрос для вас: Принимая ограничения команды (доступ только для чтения DB), как вы подходите к решению и какие инструменты/языки/платформы вы использовали бы для этого?

Широкие и двусмысленные ответы приветствуются. Спасибо за ваше время.

+0

Отъезд http://phantomjs.org/ и http://zombie.js.org. Кроме того, я только что начал проект по решению этой и подобных проблем. Он не будет использоваться в течение как минимум нескольких недель, но вы можете следить за ним здесь: http://git.io/vOrAA – theideasmith

+0

любой клиент http-клиента. – ZhongYu

+0

@ bayou.io Это зависит от того, хотите ли вы фактически автоматизировать браузер или притвориться браузером. – theideasmith

ответ

2

Я согласен с @Grisk при использовании NodeJS/ioJS в качестве платформы. Это мощный инструмент, разработанный с нуля для ввода-вывода, что делает его идеальным для решения вашей проблемы. Кроме того, сообщество узлов необычайно динамично, с npm, менеджером пакетов nodejs, размещающим тысячи легко доступных модулей. Чтобы избежать какой-либо будущей путаницы: не допускайте ошибки NodeJS для языка или базовой системы; это собственный интерпретатор javascript, построенный на двигателе Google V8, а также набор встроенных модулей для создания мощных приложений ввода-вывода. Читайте об узле онлайн.

Что касается конкретной проблемы, я бы сказал, что у вас есть два варианта:

  1. симулировать быть браузером с помощью фантомного печенья
  2. По программным навигации через веб-сайт, как вы делали.

Что касается прежнего варианта, вам необходимо вручную определить, какие файлы cookie отправляются на сервер при отправке форм на каждую страницу, а затем в вашем скрипте генерируют эти куки и включают их в http-запрос. Обратитесь к nodejs http documentation за дополнительной информацией по настройке заголовков запросов.

Ты заголовок должен будет выглядеть примерно так:

var headers = { 
    'host': < website host address here > , 
    'origin' : <website origin here> 
    'referer' : <website origin here> 
    'User-Agent': 'Opera/9.52 (X11; Linux i686; U; en)', 
    'Cookie': <cookie sent over by server here> 
} 

Недавно я наткнулся на node-icloud библиотеки, которая использует первый метод, я описываю выше, чтобы обеспечить программный доступ к своей учетной записи ICloud. Я настоятельно рекомендую прочитать его код, чтобы узнать, как он работает here.

Кроме того, я хотел бы предложить чтение до около HTTP заголовков here

Для второго варианта, проверьте phantomjs и zombiejs. Фантом хорош, потому что он работает без браузера. Я не уверен, насколько скорость этих двух библиотек сравнима с тем, что вы уже делали, но их стоит проверить.

Последняя вещь: я бы рекомендовал создать пользовательский (JSON) DSL для автоматизации взаимодействия с веб-страницами, чтобы вы могли очень легко переработать рабочие процессы взаимодействия с браузером.

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

Удачи!

+0

Я ценю ваш тщательный ответ, я обязательно изучу первый вариант с помощью Node. – DevBW

1

Я бы начал изучать NodeJS как платформу. Библиотека HTTP - невероятно мощный метод для написания приложений, которым необходимо сделать несколько запросов HTTP с необычной структурой, и он может легко общаться с браузером или в основном с чем-либо еще, что вам может понадобиться. Посмотрите на использование класса FileSystem, если вам нужно делать ввод/вывод файлов.

Если вы хотите получить действительно фантазию и использовать websockets для создания динамического webapp, который вы можете использовать в качестве интерфейса для вашего инструмента, вы можете даже do that, так что существует большая гибкость.