Автоматизация веб-запросов с помощью curl?

13

У меня есть некоторые «корпоративные» системы, которые я должен использовать на работе. Некоторые из них ужасны, с фреймами, всплывающими окнами и тому подобным.

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

Можно ли использовать локон? Или мне лучше использовать что-то вроде Selenium?

Кто-то все еще использует тебя MS-DOS
источник
1
Я бы использовал для этого Python zope.testbrowser .
phunehehe
2
Вам нужно уметь использовать Javascript?
интуитивно
2
Использование сеанса - это просто отправка идентификатора сеанса с каждым запросом. Либо в файле cookie, либо в параметре GET. wgetи curlможет использовать файл cookie Netscape, поэтому, если ваш браузер также использует такой файл, может быть достаточно просто указать его загрузчику. Итак, какой браузер вы используете?
manatwork
2
Не повезло для простого решения с этими. Firefox и Chrome используют SQLite, Opera имеет двоичный формат данных. Похоже, вам придется искать идентификатор сеанса и вручную передавать его загрузчику.
manatwork

Ответы:

13

Да, это возможно с помощью curl. Самое главное будет сохранять и перезагружать куки между использованием curl с --cookie-jar. Вы также можете разместить данные формы по мере необходимости. Я обычно использую надстройку Firefox под названием Live HTTP Headers для записи того, что происходит, когда я перехожу на веб-сайт. Он будет записывать любые заголовки, но также и любые сообщения в форме, что очень полезно при попытке выяснить, что делать с curl. Я написал сценарии bash, автоматизирующие различные вызовы curl и использующие каналы и временные файлы (любезно mktemp) для выполнения некоторой ограниченной обработки веб-страницы, но если приходится выполнять большую часть обработки веб-страницы, я обычно переключаюсь на Perl с LibWWW.

penguin359
источник
В дополнение к заголовкам Firefox Live HTTP и Safari, и Chrome могут отображать заголовки в разбивке по объектам в веб-инспекторе.
Багамат
15

Для простых случаев загрузки содержимого страницы используйте curl или wget . Оба являются инструментами командной строки, предназначенными для загрузки файлов по HTTP, и имеют много опций. В вашем случае вам, вероятно, придется сделать эти инструменты больше похожими на браузер; Ответ Lutzky в и ответ penguin359 игровых упомянуть некоторые локон и Wget варианты , которые являются полезными в этом отношении.

Иногда, когда вам необходимо войти в систему , гораздо проще сначала войти в систему вручную в веб-браузере, а затем экспортировать куки-файлы веб-браузера ( могут помочь такие расширения, как allcookies или Export Cookies для Firefox).

Если вам нужно проанализировать содержимое некоторых страниц или бланков , вам могут потребоваться более интересные инструменты, чем curl и wget. Некоторые хорошие инструменты есть Perl с LWP(libwww) и HTML::TreeBuilder(HTML-Tree) или Python со стандартными библиотеками (особенно httplibиhtmllib ).

Для более сложных взаимодействий с сайтом, ссылка на Perl - WWW :: Mechanize . Эта библиотека Perl определяет высокоуровневые функции для взаимодействия с веб-сайтом, как это делает веб-браузер, включая POSTing, формы, куки, но не Javascript. Если Perl не ваша чашка чая, эта библиотека имеет имитации с аналогичными возможностями в других языках, таких как Python mechanize и Ruby Mechanize .

Наконец, когда вам нужен Javascript , обычный подход заключается в использовании веб-браузера, который управляется платформой автоматизации браузера. Селен и Ватир - популярный выбор; см. также Существуют ли какие-либо хорошие инструменты помимо SeleniumRC, которые могут извлекать веб-страницы, включая контент, написанный после JavaScript?

Жиль "ТАК - перестань быть злым"
источник
6

Мой любимый wget, так что я приведу пример с этим. Что вы хотите сделать, так это как можно точнее копировать сеанс браузера, поэтому используйте соответствующие аргументы командной строки. То, что необходимо, зависит от того, насколько тщательно сайт проверяет ваш браузер. --referer(sic) обычно достаточно, но вам также может понадобиться --user-agentи --load-cookies.

Эта техника в основном подделывает браузер - вы пытаетесь wgetпредставить себя на сайте как браузер. Самая большая проблема, с которой вы столкнетесь, - это CAPTCHA, которого нет в приведенном вами примере сайта. Кроме того, убедитесь, что вы соблюдаете правила синхронизации сайта (в данном случае 45 секунд), иначе вы, вероятно, будете заблокированы.

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

Луцкая
источник
Хороший ответ с комплексными соображениями. Спасибо
xiaohan2012