2011-01-19 19 views
17

He visto algunas cosas alocadas cuando pego JavaScript urinate en una URL en Firefox y Chrome. ¿Es posible usar esta técnica para decirle a Chrome que visite una URL y luego la guarde como un archivo? Intento automatizar Chrome, y Selenium parecía extremadamente desalentador.Automatización de Chrome

EDIT: Lamentablemente, me olvidé de ser más claro aquí. Dejame explicar. Cosas como wget, curl, etc. no funcionarán porque tengo que pasar por los inicios de sesión en algunos de estos scripts. Y miré a iMacros, pero descubrí que no puedo hacer que corran desde la línea de comandos, excepto en Windows, a menos que pague el paquete de $ 499. Algunas otras ventajas de las GCE son que la plataforma de desarrollo es gratuita y está abierta hasta cierto punto, y son multiplataforma. (Yo uso Linux.)

EDIT: En este punto, estoy aprendiendo acerca de las extensiones de Google Chrome. Parece que son fáciles de construir y me permitirán (creo) decirle al navegador que abra una nueva pestaña, vaya a una página, manipule el DOM en esa página (como rellenar algunos campos e inicie sesión), y luego manipule el DOM en la página de respuesta. Las GCE no te permiten hacer File I/O, por lo que no son como las Extensiones de Firefox con XPCOM, pero puedes evitarlo usando AJAX para enviar datos a un script backend (como un script PHP en un servidor LAMP) para guardar esa información

EDIT: Por cierto, y esto es un poco fuera de tema (pero añado para aclarar) esas "cosas alocadas" en Javascript que mencioné fueron cuando manipulas el DOM creando una URL que se ve así:

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

¿Está en una máquina nix? Si es así, 'wget' es tu amigo! –

+1

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

Respuesta

9

La solución parece ser hacer su propio Google Chrome Extension (GCE). Es fácil de aprender en unas 4 horas si sabe cómo hacer cosas javascript ligeramente avanzadas, y es muy poderoso. Puedo usar la API de pestañas para crear una nueva pestaña y acceder a una URL específica. Luego puedo inyectar jQuery en esa URL y hacer que manipule el DOM o haga cualquier cosa que normalmente podemos hacer con jQuery. No puedo hacer archivos de E/S, pero hay dos soluciones. Uno, puedo obligar al navegador a descargar un archivo desde una ubicación remota, y puedo enviar datos desde la página actual a un servidor remoto a través de las llamadas $ .get() o $ .post() de jQuery.

+0

Ejecuto algunos JavaScript periódicamente usando una función 'setInterval', que manipula el DOM. Hago esto abriendo Chrome Dev Tools e inyectando el script en la consola de JavaScript. El problema es que si la página se vuelve a cargar, entonces tengo que reinyectar el script nuevamente de forma manual. ¿Hay alguna forma de automatizar esto, por lo que la secuencia de comandos se ejecuta de forma continua, sobreviviendo a cualquier recarga de página? –

+0

¿Hay algún tutorial con un ejemplo en algún lugar? – jechaviz

0

Puede probar iMacros for Chrome. Es un sistema de automatización bastante fácil de usar.

  1. abierto iMacros
  2. Haga clic registro.
  3. Repase su rutina de navegación.
  4. Haga clic en detener.

No creo que pueda ser más fácil que eso. Las secuencias de comandos que guarda están en texto plano, por lo que puede editarlas para obtener un control de grano fino, si es necesario.

+1

Ver mi nuevo comentario. Me disculpo por no haber sido más claro. Por un lado, iMacros no le permitirá automatizar completamente a menos que compre la versión de $ 499, y que solo se automatice por completo en Windows. Por automatizar completamente, me refiero a como hacer un script de tarea programada. Intenté que la versión gratuita de iMacros funcionara en Linux con un trabajo cron, o incluso una ejecución de línea de comandos (manualmente) contra Firefox. ¿Lo que pasa?El iMacro no se ejecutará automáticamente en Linux. En cambio, Firefox acaba de abrir y detenerse. Y el entorno para Chrome es demasiado beta: no le permitirá guardar un archivo. – Volomike

+0

iMacros es basura. Lo intenté dos veces para dos propósitos diferentes, y ninguno funcionó. Parecía resbaladizo, estaba grabando mis comandos y emocionándome. En ambos casos, estaba haciendo algo realmente simple: ir a una página web en línea, completar el formulario, hacer clic en el botón Enviar. Incluso tienen un script de muestra que hace esto. Pero en ambos casos simplemente arrojó un error durante la reproducción y no funcionaría en absoluto. Basura. – HerrimanCoder

10

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.

0

¡Definitivamente echa un vistazo a Watir! Me parece extremadamente sencillo. Funciona igual de fácil con Selenium que con Chrome, IE o Firefox. Aunque la versión para Chrome aún no es compatible oficialmente, afirman que es utilizable. Yo mismo solo lo he usado para Selenium, IE y Firefox.

Además, Watir se integra fácilmente con Cucumber, si está buscando un BDD de vanguardia (desarrollo impulsado por el comportamiento). Es solo código Ruby, es de código abierto y está alojado en gitHub. ¡Disfrutar!

+0

Si uno es fanático de Ruby, seguro, adelante. No soy fanático de Ruby. – Volomike

0

Puede finalizar la compra http://qaagent.com. Esta es una manera fácil de automatizar alguna tarea relacionada con la web

Cuestiones relacionadas