Chciałem napisać na szybko program co by mi resetował połączenie DSL w routerze jak będę tego chciał.
Ale okazuje się, że interfejs routera jest oparty przede wszystkim na JS… Czy jest jakiś sposób abym z poziomu rubiego mógł wykonać funkcje javascript na jakiejś stronie?
Jest podpięte wykonanie funkcji do komórki tabeli (onclickiem)
Łatwiej odrazu zapytać jaki to router ? :]
Co do samej metody to musisz zrobić reverse engineering co dokładnie ten onclikc robi i co wysyła na serwer aby zresetować połączenie. Jeśli już będziesz wiedział to wystarczy że spreparujesz cały nagłowek np curlem
O, racja. Ale miłoby było, jakby był taki wykonywacz JS(:
Nie podam nazwy routera bo miło będzie napisać to samemu, a tak to dostane gotowe rozwiązanie i po zabawie ;p
Też jestem zdania, że najprościej selenium webdriver użyć i po sprawie.
Ale selenium będzie uruchamiał firefoksa?
Jest coś takiego jak Envjs, który potrafi wykonywać javascript bez otwierania przeglądarki (https://github.com/smparkes/env-js). Nie wiem czy się nada i nie korzystałem z tego zbyt mocno ale możesz spróbować.
Selenium + xvfb, jeżeli nie chcesz otwierać okna z przeglądarką.
A mi się wydaje, że w złym kierunku idziecie. Przecież ten js nie jest wykonywany po stronie routera tylko przeglądarki, zapewne wywołuje jakieś żądania http. Podglądnij co on takiego robi (livehttpheaders w ff, firebug, jakiś debugger http) i to samo zrobisz sobie już w czystym rubym.
Tak jak Radarek napisał. Podejrzeć co robi JS - jakiego wysyła requesta - i wysłać właśnie takiego. Wszelkie inne metody to proktologia.
Inne metody sa mega szybkie do napisania i będą działac bez problemu od razu.nie wiem skąd do porównanie ale nie trafia ono do mnie. Na dłuższą metę pewnie request odpowiedni byłby ok ale na rzadkie okazje to selenium nada moim zdaniem. Może by tak bardziej konstruktywnie?
Tak bardziej konstruktywnie to użycie selenium przekreśla program jako konsolowy. Że już nie wspomnę o czasie wykonania. Jak kolega chce odpalać przeglądarkę, to niech sobie po prostu skrypt w greasemonkey albo bookmarkletkę napisze.
Dlaczego przekreśla?
Poza tym, matiit nigdzie nie pisał, że ma być konsolowy. Pisał za to, że ma być w Ruby, a nie skrypt GM…
możesz rzucić okiem na bubliotekę capybara która daje DSL do używania w pełni funkcjonalnej przeglądarki i kilka driver-ów które takie założenie realizuje, większość ma możliwość działania w trybie “konsolowym” i jest to używane do testów automatycznych więc raczej się nada.
W tym co kolega Matiit zamierza robić – czyli “udawanie” klikania po stronie – Mechanize będzie IMHO lepszy.
…Albo to ja jestem skrzywiony po napisaniu kilku scraperów z użyciem Mechanize, większość z nich musiała się przegryzać przez prawdziwe bluźnierstwa przeciw dobrym praktykom html czy js… dobry materiał na opowieść przy piwie
+1 tomash
Przy dzisiejszych narzędziach (firebug, itp) reverse engineering takich rzeczy jest w 99% przypadków trywialny i szybciej obczaisz jakie żądanie złożyć via mechanize niż zaprzęgniesz do pracy kobyły w stylu selenium. (I mówię to mając w swoim curriculum m.in. pisanie skrobaczek do ajaxowych systemów transakcyjnych banków).
No to ja powiem, że to w takim razie zależy od doświadczenia. Ja mam większe doświadczenie w pisaniu z użyciem selenium oraz test/unit a inni pisali scrapery z użyciem mechanize. Dla jednych to jest banał machnąć, żeby im to selenium wyklikało a dla innych podejrzeć jaki request puścić wgetem. Oba się nadadzą chociaż oczywiście selenium będzie dłużej się wykonywać i oraz będzie bardziej kobylaste (ale też do użycia z commandline’a) a mechanize czy coś takiego będzie bardziej “pure”.