2011-01-19 29 views
17

Podczas wklejenia kodu JavaScript w przeglądarce Firefox i Chrome widziałem pewne dzikie rzeczy. Czy można użyć tej techniki, aby Chrome mógł odwiedzić adres URL, a następnie zapisać go jako plik? Próbuję zautomatyzować Chrome, a Selenium wyglądało wyjątkowo zniechęcająco.Automatyzacja przeglądarki Chrome

EDYTOWANIE: Niestety, zapomniałem tu być bardziej przejrzystym. Pozwól mi wyjaśnić. Rzeczy takie jak wget, curl, itp. Nie będą działać, ponieważ muszę przejść przez loginy w niektórych z tych skryptów. I patrzyłem na iMacros, ale okazało się, że nie mogę ich uruchomić z wiersza poleceń, z wyjątkiem Windows, chyba że zapłacę za pakiet 499 $. Innymi zaletami GCE jest to, że platforma programistyczna jest darmowa i otwarta w pewnym stopniu, i są one wieloplatformowe. (Używam Linuxa.)

EDYTOWANIE: W tym momencie uczę się o rozszerzeniach Google Chrome. Wygląda na to, że są łatwe do zbudowania i pozwolą mi (jak sądzę) powiedzieć przeglądarce, aby otworzyła nową kartę, przejrzała stronę, manipulowała DOMem na tej stronie (np. Zapełnianiem niektórych pól i logowaniem), a następnie zmanipulowała DOM na stronie odpowiedzi. GCE nie pozwalają na działanie File I/O, więc nie są one jak rozszerzenia Firefox z XPCOM, ale możesz ominąć to poprzez użycie AJAX do wysłania danych do skryptu backendu (jak skrypt PHP na serwerze LAMP), aby zaoszczędzić te dane.

EDIT: Przy okazji, a to jest nieco nie na temat (ale dodam do wyjaśnienia) te „dzikie rzeczy” w JavaScript, które wymieniłem były podczas manipulowania DOM tworzenia URL, który wygląda tak:

javascript:(function(){...your URL-encoded Javascript here...})(); 
+0

Czy jesteś na maszynie nix? Jeśli tak, 'wget' jest twoim przyjacielem! –

+1

Dostępne jest darmowe narzędzie [Kantu Web Automation] (https://kantu.io) - działa ono z Chromium i pozwala zautomatyzować strony za pomocą zrzutów ekranu. Posiada również interfejs wiersza poleceń i interfejs API. – Tienkamp

Odpowiedz

9

Rozwiązaniem wydaje się stworzenie własnego Google Chrome Extension (GCE). Łatwo się nauczyć w ciągu około 4 godzin, jeśli wiesz, jak zrobić nieco zaawansowane rzeczy Javascript i jest bardzo potężny. Za pomocą interfejsu API Tabs mogę utworzyć nową kartę i przejść do określonego adresu URL. Mogę wtedy wstrzyknąć jQuery do tego adresu URL i zmusić go do manipulowania DOM lub zrobić cokolwiek, co normalnie możemy zrobić z jQuery. Nie mogę zrobić pliku I/O, ale są dwa obejścia. Po pierwsze, mogę zmusić przeglądarkę do pobrania pliku ze zdalnej lokalizacji i mogę przesłać dane z bieżącej strony z powrotem do zdalnego serwera za pośrednictwem wywołań jQuery $ .get() lub $ .post().

+0

Uruchomiłem trochę JavaScript okresowo za pomocą funkcji 'setInterval', która manipuluje DOM. Robię to, otwierając Narzędzia Chrome Dev i wstrzykując skrypt w konsoli JavaScript. Problem polega na tym, że po ponownym załadowaniu strony muszę ponownie ręcznie wprowadzić skrypt. Czy istnieje sposób na zautomatyzowanie tego, więc skrypt ciągle wykonuje, przeżywając przeładowanie strony? –

+0

Czy istnieje samouczek z przykładem gdzie indziej? – jechaviz

0

Możesz spróbować iMacros for Chrome. Jest to dość łatwy w użyciu system automatyzacji.

  1. Otwarte iMacros
  2. Kliknij Record.
  3. Idź o rutynę przeglądania.
  4. Kliknij stop.

Nie sądzę, że może to być łatwiejsze. Skrypty, które zapisuje, są w postaci zwykłego tekstu, więc możesz je edytować, aby w razie potrzeby uzyskać precyzyjną kontrolę ziarna.

+1

Zobacz mój nowy komentarz. Przepraszam, że nie było bardziej jasne. Po pierwsze, iMacros nie pozwoli ci na pełną automatyzację, chyba że kupisz wersję 499 USD, która w pełni zautomatyzuje system Windows. Automatyzując w pełni, mam na myśli, jak w przypadku skryptu zaplanowanego zadania. Starałem się, aby darmowa wersja iMacros działała na Linuksie z zadaniem crona, a nawet uruchamiać z wiersza poleceń (ręcznie) w Firefoksie. Co się dzieje?IMacro nie uruchomi się automatycznie w systemie Linux. Zamiast tego Firefox właśnie się otworzył i zatrzymał. A środowisko dla Chrome jest zdecydowanie zbyt beta - nie pozwoli ci zapisać pliku. – Volomike

+0

iMacros to śmieci. Próbowałem go dwa razy w dwóch różnych celach i nie działałem. Wydawało się, że jestem zgrabna, nagrywałem swoje polecenia i byłem podekscytowany. W obu przypadkach robiłem coś naprawdę prostego: przejdź do strony internetowej, wypełnij formularz, kliknij przycisk przesyłania. Mają nawet przykładowy skrypt, który to robi. Ale w obu przypadkach po prostu rzucił błąd podczas odtwarzania i nie działał w ogóle. Dżonka. – HerrimanCoder

10

Możesz używać Pythona do automatyzacji zadań internetowych przy użyciu pywebkitgtk. Jest to powiązanie Pythona dla WebKitGtk, który używa silnika WebKit, tego samego silnika, co chrome.

Dzięki temu wpisowi na blogu, pywebkitgtk - Execute JavaScript from Python, stworzyłem podklasę webkit.WebView, aby ułatwić te zadania.

import gtk 
import webkit 
import json 

class WebView(webkit.WebView): 
    def eval_script(self, script): 
     self.execute_script('oldtitle=document.title;document.title="!!!!";document.title=JSON.stringify(eval(' + json.dumps(script) + '));') 
     result = json.loads(self.get_main_frame().get_title()) 
     self.execute_script('document.title=oldtitle;') 
     return result 
    def wait_for_load(self): 
     handle = None 
     def load_status_cb(view, frame): 
      if frame == view.get_main_frame(): 
       self.disconnect(handle) 
       gtk.main_quit() 
     handle = self.connect('load-finished', load_status_cb) 
     gtk.main() 

dodałem funkcję zwaną eval_script który jakby execute_script, ale można dostać wyniki funkcji jako obiektów Pythona.Musisz tylko upewnić się, że to, co oceniasz, jest serializowane przez JSON.

Dodałem także funkcję wait_for_load, która jest całkiem zrozumiała.

Aby skonfigurować interfejs użytkownika, musisz najpierw utworzyć okno, przewijane okno i widok WWW.

# window 
window = gtk.Window() 
window.set_default_size(800, 600) 

# scroll view 
scroll_view = gtk.ScrolledWindow() 
scroll_view.props.hscrollbar_policy = gtk.POLICY_AUTOMATIC 
scroll_view.props.vscrollbar_policy = gtk.POLICY_AUTOMATIC 

# web view 
web_view = WebView() 

# events 
window.connect('delete-event', lambda window, event: gtk.main_quit()) 

# show 
scroll_view.add(web_view) 
window.add(scroll_view) 
window.show_all() 

Następnie można rozpocząć automatyzację! Na przykład ten kod ładuje stronę logowania StackOverflow, kliknij przycisk logowania do Facebooka, wypełnia nazwę użytkownika i hasło (w tym przypadku "test"). Na końcu pokazuje tekst przycisku logowania.

# the script is here 
web_view.open('http://www.stackoverflow.com/users/login') 
web_view.wait_for_load() 

web_view.execute_script('openid.signin("facebook")') 
web_view.wait_for_load() 

web_view.execute_script('document.querySelector("#email").value = "test"') 
web_view.execute_script('document.querySelector("#pass").value = "test"') 

print "Login's button text is:", web_view.eval_script('document.querySelector("#buttons input[type=\\"submit\\"]").value') 

W moim przypadku interfejs Facebooka był w języku tajskim i mogłem zobaczyć tekst przycisku logowania.

się zalogować na przycisk tekst: เข้า สู่ ระบบ

Można również faktycznie kliknij w przycisk, po prostu dzwoniąc click() na tym elemencie. (Uwaga: click() prace dla elementów przycisków, a nie na linki)

web_view.execute_script('document.querySelector("#buttons input[type=\\"submit\\"]").click()') 
web_view.wait_for_load() 

Można zauważyć, że wszystkie skrypty po zakończeniu aplikacja zamyka się bez oczekiwania.

Jeśli chcesz zachować aplikacji działającej po zakończeniu wszystkich skryptów tam, trzeba dodać ostatnią linię:

gtk.main() 

Ponadto, jeśli usunąć wiersz window.show_all() i ostatni gtk.main() linię. Wtedy Twoja aplikacja będzie działać bez GUI. (Uwaga: trzeba jeszcze serwer wyświetlania.)

tej chwili nie mamy jeszcze dobre docs pywebkitgtk, więc trzeba spojrzeć na WebKitGtk's documentation zamiast. Powodzenia.

0

Zdecydowanie sprawdź Watir! Uważam to za bardzo proste. Działa tak samo z Selenium, jak z Chrome, IE lub Firefox. Chociaż wersja dla Chrome nie jest jeszcze oficjalnie obsługiwana, twierdzą, że jest ona użyteczna. Ja sam użyłem go tylko dla Selenium, IE i Firefox.

Ponadto Watir z łatwością integruje się z Cucumber, jeśli szukasz najnowocześniejszej technologii BDD (Behavior-Driven Development). To tylko kod w języku Ruby, jest open source i hostowany pod numerem gitHub. Cieszyć się!

+0

Jeśli ktoś jest fanem Rubin, to na pewno. Nie jestem fanem Ruby. – Volomike

0

Możesz zamówić http://qaagent.com. Jest to łatwy sposób zautomatyzowania niektórych zadań związanych z przeglądarką WWW.

Powiązane problemy