Mam kilka „korporacyjnych” systemów, z których muszę korzystać w pracy. Niektóre z nich są okropne, z ramkami, wyskakującymi oknami i tym podobne.
Myślałem o zautomatyzowaniu niektórych rzeczy za pomocą curl lub czegoś takiego. Potrzebuję się zalogować, kliknąć hiperłącza, ustawić trochę danych, a oni piszą.
Czy można używać loków? A może lepiej będę używać czegoś takiego jak Selenium?
wget
icurl
może korzystać z pliku cookie Netscape, więc jeśli Twoja przeglądarka również go używa, może to wystarczyć, aby po prostu określić go w downloaderze. Jakiej przeglądarki używasz?Odpowiedzi:
Tak, jest to w pełni możliwe przy zwijaniu. Najważniejsze będzie zapisywanie i ponowne ładowanie plików cookie między użytkami curl
--cookie-jar
. W razie potrzeby możesz także publikować dane formularza. Zwykle używam dodatku Firefox o nazwie Live HTTP Headers, aby rejestrować, co się dzieje, gdy nawiguję po stronie internetowej. Będzie nagrywać wszystkie nagłówki, ale także wszelkie posty z formularzy, co jest bardzo pomocne, gdy próbujesz dowiedzieć się, co zrobić z curl. Napisałem skrypty bash automatyzujące różne wywołania curl i używam potoków i plików tymczasowych (dzięki uprzejmościmktemp
), aby wykonać pewne ograniczone przetwarzanie na stronie internetowej, ale jeśli muszę wykonać dużo przetwarzania strony, zwykle przełączam się na Perl z LibWWW.źródło
W prostych przypadkach pobierania zawartości strony użyj curl lub wget . Oba są narzędziami wiersza poleceń zaprojektowanymi do pobierania plików przez HTTP i mają wiele opcji. W twoim przypadku prawdopodobnie będziesz musiał sprawić, by te narzędzia wyglądały bardziej jak przeglądarka; Odpowiedź lutzky'ego i odpowiedź pingwina359 wspominają niektóre opcje curl i wget, które są przydatne w tym względzie.
Czasami, gdy musisz się zalogować , znacznie łatwiej jest najpierw zalogować się ręcznie w przeglądarce internetowej, a następnie wyeksportować pliki cookie przeglądarki internetowej (rozszerzenia takie jak ciasteczka lub Eksportuj pliki cookie dla przeglądarki Firefox mogą pomóc).
Jeśli musisz przeanalizować zawartość niektórych stron lub formularzy postów , możesz potrzebować bardziej wyszukanych narzędzi niż curl i wget. Niektóre dobre narzędzia to Perl z
LWP
(libwww) iHTML::TreeBuilder
(HTML-Tree) lub Python ze standardowymi bibliotekami (szczególniehttplib
ihtmllib
).W przypadku bardziej złożonych interakcji z witryną referencyjną jest strona WWW Perla :: Mechanize . Ta biblioteka Perla definiuje funkcje wysokiego poziomu do interakcji ze stroną internetową, podobnie jak przeglądarka internetowa, w tym POSTing, formularze, pliki cookie, ale nie Javascript. Jeśli Perl nie jest twoją filiżanką herbaty, ta biblioteka ma imitacje o podobnych możliwościach w innych językach, takich jak Python mechanize i Ruby Mechanize .
Wreszcie, gdy potrzebujesz Javascript , zwykle stosuje się przeglądarkę internetową, która jest obsługiwana przez platformę automatyzacji przeglądarki. Selen i Watir są popularnymi wyborami; zobacz także Czy są jakieś dobre narzędzia oprócz SeleniumRC, które mogą pobierać strony internetowe, w tym treści pomalowane JavaScriptem?
źródło
Moim ulubionym jest
wget
, dlatego podam przykład. To, co chcesz zrobić, to replikować sesję przeglądarki tak blisko, jak to możliwe, więc użyj odpowiednich argumentów wiersza polecenia. Te, które są konieczne, zależą od tego, jak dokładnie strona sprawdza przeglądarkę.--referer
(sic) jest zwykle wystarczające, ale możesz także potrzebować--user-agent
i--load-cookies
.Ta technika polega na fałszowaniu przeglądarki - próbujesz
wget
zaprezentować się w witrynie jako przeglądarka. Największym problemem, z którym będziesz musiał się zmierzyć, jest CAPTCHA, którego nie ma w podanej przykładowej witrynie. Upewnij się również, że przestrzegasz zasad dotyczących czasu witryny (w tym przypadku 45 sekund), w przeciwnym razie prawdopodobnie zostaniesz zablokowany.Prawdopodobnie nie jest możliwe pobranie tego samego pliku w różnych sesjach - strona przyznaje uprawnienia do pobierania określonego pliku do określonej sesji.
źródło