2011-01-19 10 views
17

Ho visto alcune cose brutte accadere quando ho incollato alcuni Javascript urlencoded in un URL su Firefox e Chrome. È possibile utilizzare questa tecnica per dire a Chrome di visitare un URL e quindi salvarlo come file? Sto cercando di automatizzare Chrome e Selenium sembrava estremamente scoraggiante.Automazione di Chrome

MODIFICA: Purtroppo, ho dimenticato di essere più chiaro qui. Lasciatemi spiegare. Cose come wget, curl, ecc. Non funzioneranno perché devo passare gli accessi in alcuni di questi script. E ho guardato iMacros, ma ho scoperto che non posso farli eseguire dalla riga di comando tranne su Windows, a meno che non paghi il pacchetto da $ 499. Alcuni altri vantaggi di GCE sono che la piattaforma di sviluppo è gratuita e aperta a un certo livello e sono multipiattaforma. (Io uso Linux.)

EDIT: A questo punto, sto imparando su Google Chrome Extensions. Sembra che siano facili da compilare e mi permetteranno (credo) di dire al browser di aprire una nuova scheda, andare su una pagina, manipolare il DOM su quella pagina (come compilare alcuni campi e loggarsi), e quindi manipolare il DOM nella pagina di risposta. I GCE non ti permettono di fare I/O su file, quindi non sono come le estensioni di Firefox con XPCOM, ma puoi aggirare il problema usando AJAX per inviare dati a uno script di back-end (come uno script PHP su un server LAMP) per salvare quei dati.

EDIT: A proposito, e questo è un po 'off-topic (ma aggiungo chiarire) quelle "cose ​​selvagge" in Javascript che ho citato aveva quando manipolare il DOM creare un URL che appare in questo modo:

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

Sei su una macchina nix? Se è così, 'wget' è tuo amico! –

+1

C'è lo strumento gratuito [Kantu Web Automation] (https://kantu.io) - funziona con Chromium e consente di automatizzare i siti web tramite schermate. Ha anche un'interfaccia a linea di comando e un'API. – Tienkamp

risposta

9

La soluzione sembra essere quella di rendere il proprio Google Chrome Extension (GCE). È facile apprendere in circa 4 ore se sai come fare cose Javascript leggermente avanzate ed è molto potente. Posso utilizzare l'API Tabs per creare una nuova scheda e andare a un URL specifico. Posso quindi inserire jQuery in quell'URL e farlo manipolare il DOM o fare qualsiasi cosa che normalmente possiamo fare con jQuery. Non riesco a fare l'I/O di file, ma ci sono due soluzioni alternative. Uno, posso forzare il browser a scaricare un file da una posizione remota, e posso inviare i dati dalla pagina corrente su un server remoto tramite le chiamate $ .get() o $ .post() di jQuery.

+0

Eseguo periodicamente alcuni JavaScript usando una funzione 'setInterval', che manipola il DOM. Lo faccio aprendo Chrome Dev Tools e inserendo lo script nella console JavaScript. Il problema è che se la pagina si ricarica, allora devo reiniettare nuovamente lo script manualmente. C'è un modo per automatizzare questo, quindi lo script viene eseguito continuamente, sopravvivendo a qualsiasi caricamento della pagina? –

+0

Esiste un tutorial con un esempio in cui? – jechaviz

0

Si potrebbe provare iMacros for Chrome. È un sistema di automazione piuttosto facile da usare.

  1. Aprire iMacros
  2. Clicca Record.
  3. Vai a fare la tua routine di navigazione.
  4. Fare clic su stop.

Non credo che possa essere più facile di così. Gli script salvati sono in testo normale, quindi è possibile modificarli per un controllo a grana fine, se necessario.

+1

Vedere il mio nuovo commento. Mi scuso per non essere stato più chiaro. Per prima cosa, iMacros non ti consente di automatizzare completamente a meno che non acquisti la versione da $ 499 e che si automatizzi completamente solo su Windows. Automatizzando completamente, intendo come nel fare uno script di attività pianificate. Ho cercato di far funzionare la versione gratuita di iMacros su Linux con un cron job, o anche con una riga di comando (manualmente) contro Firefox. Che succede?L'iMacro non funzionerebbe automaticamente su Linux. Invece, Firefox ha appena aperto e fermato. E l'ambiente per Chrome è troppo beta - non ti permetterà di salvare un file. – Volomike

+0

iMacros è spazzatura. L'ho provato due volte per 2 scopi diversi, e nessuno dei due ha funzionato. Sembrava scivoloso, stavo registrando i miei comandi e mi emozionavo. In entrambi i casi stavo facendo qualcosa di veramente semplice: andare su una pagina web online, compilare il modulo, fare clic sul pulsante di invio. Hanno anche uno script di esempio che fa questo. Ma in entrambi i casi ha semplicemente generato un errore durante la riproduzione e non funzionava affatto. Junk. – HerrimanCoder

10

È possibile utilizzare Python per automatizzare le attività Web utilizzando pywebkitgtk. È un binding Python per WebKitGtk, che usa il motore WebKit, lo stesso motore di Chrome.

Grazie a questo post del blog, pywebkitgtk - Execute JavaScript from Python, ho creato una sottoclasse di webkit.WebView per semplificare queste attività.

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() 

ho aggiunto la funzione chiamata eval_script che è come execute_script, ma si potrebbe ottenere i risultati della funzione come oggetti Python.Devi solo assicurarti che ciò che stai valutando sia serializzabile con JSON.

Inoltre, ho aggiunto una funzione wait_for_load che è abbastanza auto-esplicativa.

Per impostare un'interfaccia utente, è necessario prima creare una finestra, una finestra a scorrimento e una visualizzazione Web.

# 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() 

Quindi è possibile iniziare a automatizzare le cose! Ad esempio, questo codice carica la pagina di accesso di StackOverflow, fa clic sul pulsante di accesso di Facebook, inserisce nome utente e password (in questo caso "test"). Infine, mostra il testo del pulsante di accesso.

# 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') 

Nel mio caso, l'interfaccia di Facebook era in lingua tailandese, e ho potuto vedere il testo del pulsante del login. pulsante di testo

di login è: เข้า สู่ ระบบ

È anche possibile avere in realtà fare clic sul pulsante di invio, semplicemente chiamando click() su questo elemento. (Nota: click() lavori per gli elementi dei pulsanti, non sui link)

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

Si noterà che dopo tutti gli script sono finiti, l'applicazione si chiude senza aspettare.

Se si desidera mantenere l'applicazione in esecuzione dopo aver finito tutti gli script in là, è necessario aggiungere l'ultima riga:

gtk.main() 

Inoltre, se si rimuove la linea window.show_all() e l'ultima gtk.main() riga. Quindi la tua app funzionerà senza una GUI. (Nota: è ancora bisogno di un server di visualizzazione.)

In questo momento, non abbiamo buona documentazione pywebkitgtk ancora, in modo da avere a guardare WebKitGtk's documentation invece. In bocca al lupo.

0

Assolutamente da verificare Watir! Lo trovo estremamente semplice. Funziona altrettanto facilmente con Selenium come con Chrome, IE o Firefox. Sebbene la versione per Chrome non sia ancora ufficialmente supportata, affermano che è utilizzabile. Io stesso l'ho usato solo per Selenium, IE e Firefox.

Inoltre, Watir si integra facilmente con Cucumber, se si sta cercando un BDD all'avanguardia (sviluppo basato sul comportamento). È solo codice Ruby, è open source e ospitato su gitHub. Godere!

+0

Se uno è un fan di Ruby, certo, fallo. Non sono un fan di Ruby. – Volomike

0

È possibile effettuare il checkout http://qaagent.com. Questo è un modo semplice per automatizzare alcune attività correlate al web

Problemi correlati