Puede usar Python para automatizar tareas web usando pywebkitgtk. Es un enlace de Python para WebKitGtk, que utiliza el motor WebKit, el mismo motor que Chrome.
Gracias a esta entrada de blog, pywebkitgtk - Execute JavaScript from Python, hice una subclase de webkit.WebView
para facilitar estas tareas.
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()
que añade la función llamada eval_script
que es como execute_script
, pero se puede obtener los resultados de la función como objetos de Python.Solo necesita asegurarse de que lo que está evaluando es JSON-serializable.
Además, agregué una función wait_for_load
que es bastante autoexplicativa.
Para configurar una interfaz de usuario, primero debe crear una ventana, una ventana desplazada y una vista 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()
¡Entonces puede comenzar a automatizar las cosas! Por ejemplo, este código carga la página de inicio de sesión de StackOverflow, hace clic en el botón de inicio de sesión de Facebook, rellena el nombre de usuario y la contraseña (en este caso, "prueba"). Finalmente, muestra el texto del botón de inicio de sesión.
# 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')
En mi caso, la interfaz de Facebook estaba en tailandés, y pude ver el texto del botón de inicio de sesión. texto del botón
de inicio de sesión es: เข้า สู่ ระบบ
Puede también haber realmente haga clic en el botón de enviar, con sólo llamar click()
en ese elemento. (Nota: click()
obras para elementos de botón, no en los enlaces)
web_view.execute_script('document.querySelector("#buttons input[type=\\"submit\\"]").click()')
web_view.wait_for_load()
Usted se dará cuenta de que después de todas las secuencias de comandos están terminados, la aplicación se cierra en sí sin tener que esperar.
Si desea mantener la aplicación que se ejecuta después de que se termine de todos los guiones de allí, es necesario agregar la última línea:
gtk.main()
Además, si se quita la línea window.show_all()
y el último gtk.main()
línea. Entonces tu aplicación funcionará sin una GUI. (Nota: Usted todavía necesita un servidor de pantalla.)
En este momento, no disponemos de buenos doctores pywebkitgtk sin embargo, por lo que tiene que mirar WebKitGtk's documentation lugar. Buena suerte.
¿Está en una máquina nix? Si es así, 'wget' es tu amigo! –
Existe la herramienta gratuita [Kantu Web Automation] (https://kantu.io) - funciona con Chromium y le permite automatizar los sitios web mediante capturas de pantalla. También tiene una interfaz de línea de comandos y una API. – Tienkamp