È 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.
Sei su una macchina nix? Se è così, 'wget' è tuo amico! –
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