2010-04-18 8 views
9

Estoy buscando una forma de controlar programáticamente un navegador en una Mac (es decir, Firefox o Safari o Chrome/-ium u Opera, pero no IE) usando Python.Controlando un navegador usando Python, en una Mac

Las acciones que necesito incluyen seguir los enlaces, verificar si los elementos existen en una página y enviar formularios.

¿Qué solución recomendaría?

+1

podría explicar por qué es necesario para controlar un navegador web para esas tareas ? – dzen

Respuesta

0

Eche un vistazo a PyShell (una extensión de PyXPCOM).

Ejemplo:

promptSvc = components.classes["@mozilla.org/embedcomp/prompt-service;1"].\ 
     getService(Components.interfaces.nsIPromptService) 
promptSvc.alert(None, 'Greeting...', "Hello from Python") 

Python PyShell 0.1, Mozilla, popup, OK

2

Pruebe mechanize, si no lo hace en realidad necesita un navegador.

Ejemplo:

import re 
import mechanize 

br = mechanize.Browser() 
br.open("http://www.example.com/") 
# follow second link with element text matching regular expression 
response1 = br.follow_link(text_regex=r"cheese\s*shop", nr=1) 
assert br.viewing_html() 
print br.title() 
print response1.geturl() 
print response1.info() # headers 
print response1.read() # body 

br.select_form(name="order") 
# Browser passes through unknown attributes (including methods) 
# to the selected HTMLForm. 
br["cheeses"] = ["mozzarella", "caerphilly"] # (the method here is __setitem__) 
# Submit current form. Browser calls .close() on the current response on 
# navigation, so this closes response1 
response2 = br.submit() 
+3

Específicamente le pedí que controlara un navegador por algunas buenas razones ... ej. el sitio que estoy automatizando es AJAX heavy y afaik mechanize y similares están lejos incluso de ejecutar el javascript de manipulación de DOM más básico. –

4

Salida python-browsercontrol.

Además, se podía leer este foro (lo sé, es viejo, pero parece muy relevante a su pregunta): http://bytes.com/topic/python/answers/45528-python-client-side-browser-script-language

también: http://docs.python.org/library/webbrowser.html

Ejemplo:

from browser import * 
my_browser = Firefox(99, '/usr/lib/firefox/firefox-bin') my_browser.open_url('cnn.com') 

open_url regresa cuando el documento de la página de inicio de cnn.com se carga en el marco del navegador.

1

Varias aplicaciones de Mac pueden ser controlados a través osascript (también denominado AppleScript), que puede ser enviado a través del comando osascript. O'Reilly tiene un article on invoking osascript from Python. No puedo garantizar que haga exactamente lo que quiere, pero es un punto de partida.

2

Puede ser un poco restrictivo, pero py-appscript puede ser la forma más fácil de controlar un navegador Applescript'able de Python.

Para cosas más complejas, puede usar PyObjC para lograr casi cualquier cosa: por ejemplo, webkit2png es una secuencia de comandos de Python que utiliza WebKit para cargar una página y guardar una imagen de la misma. Necesita tener un entendimiento decente de Objective-C y Cocoa/etc para usarlo (ya que solo expone objetos ObjC a Python)

Screen-scaping puede lograr lo que quiera con mucha menos complejidad.

7

Me gusta Selenium, es scriptable a través de Python. El Selenium IDE solo se ejecuta en Firefox, pero Selenium RC es compatible con múltiples navegadores.

+1

[Selenium-RC] (http://seleniumhq.org/docs/05_selenium_rc.html) tiene soporte para Safari y muchos otros navegadores en OS X también, según su [sitio web] (http://seleniumhq.org /about/platforms.html#programming-languages). – fiirhok

2

Salida módulo de Python spynner.

Spynner es un módulo de navegador web programático para Python. Se basa en PyQT y WebKit. Es compatible con Javascript, AJAX y cualquier otra tecnología que!WebKit es capaz de manejar (Flash, SVG, ...). Spynner aprovecha JQuery. una poderosa librería Javascript que facilita enormemente la interacción con páginas y la simulación de eventos.

Utilizando Spynner, podría simular un navegador web sin GUI (aunque se puede abrir una ventana de exploración para depuración), por lo que se puede usar para implementar rastreadores o herramientas de prueba de aceptación.

Ver some examples at GitHub page.

0

Pedido MozMill https://github.com/mikeal/mozmill

MozMill es un marco de interfaz de usuario de automatización para aplicaciones de Mozilla Firefox y Thunderbird. Es a la vez un complemento y una herramienta de línea de comandos de Python. El complemento proporciona un IDE para escribir y ejecutar las pruebas de JavaScript y el paquete de Python proporciona un mecanismo para ejecutar las pruebas desde la línea de comandos y también proporciona una forma de probar el reinicio de la aplicación.

1

Quizás dominado, pero mira Marionette para controlar Firefox. Hay una tutorial at readthedocs:

use por primera vez un Marionette-enabled firefox instance:

firefox -marionette 

a continuación, crear un cliente:

client = Marionette('localhost', port=2828) 
client.start_session() 

navegación f.ex. se realiza a través

url = 'http://mozilla.org' 
client.navigate(url) 
client.go_back() 
client.go_forward() 
assert client.get_url() == url 
0

Puede utilizar selenium biblioteca para Python, aquí es un ejemplo simple (en forma de unittest):

#!/usr/bin/env python3 
import unittest 
from selenium import webdriver 

class FooTest(unittest.TestCase): 
    def setUp(self): 
     self.driver = webdriver.Firefox() 
     self.base_url = "http://example.com" 

    def is_text_present(self, text): 
     return str(text) in self.driver.page_source 

    def test_example(self): 
     self.driver.get(self.base_url + "/") 
     self.assertTrue(self.is_text_present("Example")) 

if __name__ == '__main__': 

    suite = unittest.TestLoader().loadTestsFromTestCase(FooTest) 
    result = unittest.TextTestRunner(verbosity=2).run(suite) 
Cuestiones relacionadas