Язык программирования для автоматического перехода на сайт?

Я программировал уже много лет, и у меня есть только один вопрос.

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

Это отличается от макроса, поскольку макрос выполняет только предопределенный набор действий. С другой стороны, программа будет вести себя по-разному в зависимости от того, что отображается на экране.

Может быть, какой-то язык сценариев? Или язык общего назначения. Ваши ответы будут оценены.

Ответ 1

Я использую Ruby и watir, чтобы сделать это, очень прямо и работает, автоматизируя IE или Firefox.

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

Ответ 2

Для Perl WWW:: Mechanize является стандартным инструментом для навигации по веб-сайтам. Он обрабатывает файлы cookie, сеансы, знает, как взаимодействовать с формами, выполнять клики и т.д. Он поддерживает состояние по мере его продвижения.

Один недостаток - это не обработка javascript. Есть несколько модулей Perl для взаимодействия с Javascript, но они не интегрированы с WWW:: Mechanize.

Ответ 3

Многие из этих ответов ориентированы на соскабливание приложений. Если это то, что вы хотите, используйте эквивалент WWW:: Mechanize на выбранном вами языке (Perl канонический, Python тоже хорошо работает).

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

Два из них выделяются Twill и Selenium.

Они обеспечивают именно то, что вы просите: простой интерфейс для просмотра веб-сайтов с script. Они позволяют больше контролировать ваш просмотр, особенно в отношении javascript и различных типов эффектов, которые проявляются, когда вы двигаетесь вперед и назад на веб-сайте, оставляя след.

Ответ 4

Я считаю, что вы не ищете язык, а фреймворк, который позволит вам это сделать. Обычно это делается с помощью программного обеспечения для очистки веб-страниц. Есть некоторые онлайн-сервисы, например. Mozenda, которые позволяют вам делать простые вещи. Существуют также рамки, которые помогут вам сделать то же самое более строгим образом. У меня есть опыт работы с screen-scraper, который я считаю одним из самых многофункциональных.

Еще один тип фреймворков - веб-искатель - это пройти через веб-сайт и индексировать его (например, для поисковой системы.

Ответ 6

Я бы, конечно, пошел на какой-то язык сценариев, а Ruby/Mechanize был моим фаворитом, взгляните на некоторые примеры... Конечно, Perl и Python также являются хорошим выбором. Если не будет плана, чтобы он был частью какого-либо другого приложения, я бы избегал статически типизированных языков - слишком много шаблонов IMHO.

require 'rubygems'
require 'mechanize'

agent = WWW::Mechanize.new
page = agent.get('http://google.com/')
google_form = page.form('f')
google_form.q = 'ruby mechanize'
page = agent.submit(google_form)
pp page

Механизация - действительно отличная библиотека, так как это не просто HTTP GET/POST запрос-и-выборка: она отслеживает файлы cookie, тем самым тщательно подражая реальному поведению веб-браузера.

Ответ 7

WatiN - еще один .Net способ просмотра и выполнения различных действий.

Ответ 9

Вы можете сделать все это с помощью WebRequest объекта в С#

public static void Main ()
{
    // Create a request for the URL.         
    WebRequest request = WebRequest.Create ("http://www.contoso.com/default.html");
    // If required by the server, set the credentials.
    request.Credentials = CredentialCache.DefaultCredentials;
    // Get the response.
    HttpWebResponse response = (HttpWebResponse)request.GetResponse ();
    // Display the status.
    Console.WriteLine (response.StatusDescription);
    // Get the stream containing content returned by the server.
    Stream dataStream = response.GetResponseStream ();
    // Open the stream using a StreamReader for easy access.
    StreamReader reader = new StreamReader (dataStream);
    // Read the content.
    string responseFromServer = reader.ReadToEnd ();
    // Display the content.
    Console.WriteLine (responseFromServer);
    // Cleanup the streams and the response.
    reader.Close ();
    dataStream.Close ();
    response.Close ();
}