2013-05-14 12 views
5

Używam Watir i Nokogiri do analizowania stron internetowych i interakcji z nimi. Chciałbym określić, czy element DOM uruchamia skrypt po kliknięciu. Z moich badań wynika, że ​​jest to możliwe z JavaScriptem i narzędziami do Chrome, ale chciałbym to zrobić z Ruby.Jak sprawdzić, czy element DOM ma detektor zdarzeń z Ruby

Na przykład http://worrydream.com. Kiedy sprawdzam wyświetlane obrazy, widzę tylko elementy div z niektórymi stylami CSS, ale nie wskazują, że jest to łącze lub że zareaguje, gdy kliknę. Jednak po kliknięciu pewnych elementów wykonywana jest animacja (lub skrypt). Co oznacza, że ​​kliknięcie obrazu jest zdarzeniem?

Aktualizacja: Początkowo, co ja rozważa robi się skrobanie JavaScript związane ze stroną, a potem jakoś ustalenia, czy zdarzenie zostanie uruchomiony, ale postaram rozwiązanie zaproponowane przez Mark Thomas i zaznaczyć swoją odpowiedź jako poprawne, gdy go przetestowałem.

Odpowiedz

1

Krótka odpowiedź? Nic.

Długa odpowiedź:

Aby dowiedzieć się, jakie elementy wywołać skrypty, to trzeba wiedzieć, co Javascript został wykonany, że przywiązuje słuchaczy do każdego elementu. Aby to zrobić, musisz mieć możliwość uruchomienia Javascript. WATIR i Nokogiri nie uruchamiają Javascript samodzielnie. WATIR używa przeglądarki, która wewnętrznie wykonuje JavaScript. Watir-webdriver używa emulatora przeglądarki opartego na Javie (Selenium), który ma również executor JavaScript, który wykona javascript strony. Nokogiri w ogóle nie uruchamia JavaScript.

Musisz więc wstrzyknąć trochę własnego skryptu JavaScript, aby "odczytać", jakie słuchacze są dołączone do konkretnego elementu. Nie jest to łatwe, ponieważ nie masz wpływu na środowisko JavaScript. Ale,, nawet jeśli znalazłeś sposób, aby to zrobić, okazuje się, że nie ma standardowej metody zapewnionej przez interfejs DOM W3C, aby dowiedzieć się, jakie detektory zdarzeń są dołączone do konkretnego elementu. Poszczególne biblioteki JavaScript takie jak JQuery buforują swoich odbiorców, ale każdy robi to na swój własny sposób.

Innymi słowy, staje się to bardzo skomplikowane.

Możliwym rozwiązaniem

Poniżej wszystko domysły, ale jeśli naprawdę chciał kontynuować uzyskanie tej informacji z powrotem w Ruby ziemi, to daje coś do wypróbowania.

Po pierwsze, potrzebujesz sposobu na wprowadzenie JS do swoich stron i uzyskanie wyniku. Może to być możliwe za pomocą watir-webdrivera, ponieważ Selenium ma do tego haki. Zobacz sam koniec instrukcji this page, aby uzyskać instrukcje dotyczące wstrzykiwania JS i zwracania wyniku z powrotem do osoby dzwoniącej w Selenium. Inną opcją jest PhantomJS, która jest bezgłową przeglądarką z interfejsem JS API.

Po drugie, musisz znaleźć bibliotekę JavaScript, która zrozumie, w jaki sposób każda z popularnych bibliotek JS buforuje swoich odbiorców i może zbierać te informacje. W tym celu możesz spróbować Visual Event 2.

Nadal będziesz musiał je łączyć, co wymagałoby trochę hakerów JS. Powodzenia.

+0

Masz rację, kierując mnie do wizualnego wydarzenia 2. Zastanowiłem się już wcześniej, ale z powodu pewnych nieporozumień, które miałem, początkowo go odrzuciłem.Teraz szukam, jak wyodrębnić informacje z Visual Event 2, do Rubiego, jak wykazano w następującym [pytanie] (http://stackoverflow.com/questions/16577725/extracting-visual-event-2-output-into-script) . Mam nadzieję, że wkrótce będę mógł odpowiedzieć na to pytanie! – Seanny123

+0

Poprzez ingerencję w kod źródłowy Visual Event 2, a następnie wstrzyknięcie go za pomocą Selenium-Webdriver, udało mi się zidentyfikować element powiązany ze zdarzeniem JavaScript i pobrać z niego informacje. Dziękuję, że skierowałeś mnie we właściwym kierunku, Mark. – Seanny123

+0

Gratulacje! Cieszę się, że to działało. –

Powiązane problemy