Автоматизація веб-запитів за допомогою curl?


13

У мене є деякі «корпоративні» системи, які мені доводиться використовувати на роботі. Деякі з них жахливі, з кадрами, спливаючими вікнами тощо.

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

Чи можна використовувати завиток? Або я буду краще використовувати щось на зразок селену?


1
Я б для цього використовував zope.testbrowser Python .
phunehehe

2
Чи потрібно мати можливість використовувати Javascript?
інтуїтивно,


2
Використання сеансу - це просто надсилання ідентифікатора сеансу з кожним запитом. Або в файлі cookie, або в GET-параметрі. wgetі curlможе використовувати файл файлів cookie Netscape, тому, якщо ваш браузер також використовує такий, може бути достатньо, щоб просто вказати його завантажувачу. Отже, який браузер ви використовуєте?
манатство

2
Немає удачі для простого рішення з ними. Firefox і Chrome використовують SQLite, Opera має формат файлу бінарних даних. Схоже, вам доведеться шукати ідентифікатор сеансу та передавати його вручну завантажувачу.
манатура

Відповіді:


13

Так, цілком можливо з завиткою. Найважливішим буде збереження та перезавантаження файлів cookie між використанням curl --cookie-jar. Ви також можете розміщувати дані форми за потребою. Зазвичай я використовую надбудову Firefox під назвою Live HTTP заголовки, щоб зафіксувати те, що відбувається під час переходу на веб-сайт. Він записуватиме будь-які заголовки, а також будь-які повідомлення форми, що дуже корисно, коли ви намагаєтеся зрозуміти, що робити з завитком. Я писав bash-скрипти, що автоматизують різні виклики завитків і використовую труби та тимчасові файли (люб’язно mktemp), щоб зробити обмежену обробку веб-сторінки, але якщо доведеться багато обробляти веб-сторінки, я зазвичай перемикаюся на Perl за допомогою LibWWW.


Окрім заголовків HTTP Firefox Live, і Safari, і Chrome можуть відображати заголовки, розбиті за об’єктами, у веб-інспекторі.
bahamat

15

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

Іноді, коли вам потрібно увійти в систему , набагато простіше спочатку ввійти вручну у веб-браузері, а потім експортувати файли cookie веб-браузера (розширення на кшталт allcookies або Export Cookies для Firefox можуть допомогти).

Якщо вам потрібно проаналізувати вміст деяких сторінок або поштових форм , можливо, вам знадобляться цікавіші інструменти, ніж curl і wget. Деякі хороші інструменти є Perl з LWP(libwww) і HTML::TreeBuilder(HTML-Tree) або Python зі стандартними бібліотеками (особливо httplibіhtmllib ).

Для більш складних взаємодій з веб-сайтом, посиланням є WWW Perl :: Mehanize . Ця бібліотека Perl визначає функції високого рівня для взаємодії з веб-сайтом, як це робить веб-браузер, включаючи POSTing, форми, файли cookie, але не Javascript. Якщо Perl - це не ваша чашка чаю, ця бібліотека має імітації з подібними можливостями іншими мовами, такими як Python механізація та Ruby Mechanize .

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


6

Улюблений мій wget, тому я наведу приклад з цим. Що ви хочете зробити, це скопіювати сеанс свого браузера якомога ближче, тому використовуйте відповідні аргументи командного рядка. Необхідні залежать від того, наскільки ретельно сайт перевіряє ваш браузер. --referer(sic) зазвичай достатньо, але вам може знадобитися --user-agentі --load-cookies.

Ця техніка в основному є підробкою браузера - ви намагаєтеся wgetпредставити себе на сайті як браузер. Найбільшою проблемою, з якою ви стикаєтеся, є CAPTCHA, якої немає на наведеному вами прикладі. Крім того, переконайтеся, що ви дотримуєтесь правил синхронізації сайту (у цьому випадку 45 секунд), інакше, можливо, вас заблокують.

Можливо, не можна завантажувати один і той самий файл на різних сесіях - сайт надає привілеї для завантаження певного файлу на певний сеанс.


Гарна відповідь із вичерпними міркуваннями. Спасибі
xiaohan2012
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.