2011-02-17 12 views
10

Así que comencé con Mechanize, y aparentemente lo primero que probé fue un sitio navegado con alto JavaScript mono-rinoceronte.Presentar sin el uso de un botón de enviar, Mecanizar

Ahora, lo que me ha impedido es enviar el formulario.

Normalmente haré un envío utilizando la función incorporada Mechanize de submit().

import mechanize 

browser = mechanize.Browser() 
browser.select_form(name = 'foo') 
browser.form['bar'] = 'baz' 
browser.submit() 

De esta manera se utilizaría el botón de enviar que está disponible en el formulario HTML.

Sin embargo, el sitio en el que estoy atascado tenía que ser uno que no utiliza botones de envío de HTML ... No, intentan ser gurús de JavaScript y hacen un envío mediante JavaScript.

El envío habitual() no parece funcionar con esto.

Entonces ... ¿Hay alguna forma de evitar esto?

Cualquier ayuda es apreciada. ¡Muchas gracias!

- [Editar] -

La función de JavaScript que estoy atascado en:

function foo(bar, baz) { 
    var qux = document.forms["qux"]; 

    qux.bar.value = bar.split("$").join(":"); 
qux.baz.value = baz; 
qux.submit(); 
} 

Lo que hice en Python (y lo que no funciona):

def foo(browser, bar, baz): 
    qux = browser.select_form("qux") 

    browser.form[bar] = ":".join(bar.split("$")) 
    browser.form[baz] = baz 
    browser.submit() 

Respuesta

11

Tres formas:

El primer método es preferible si el formulario se envía utilizando el método POST/GET, de lo contrario, usted h ave para recurrir al segundo y tercer método.

  1. enviar el formulario de forma manual y comprobar si hay solicitudes POST/GET, sus parámetros y la url puesto requerido para enviar el formulario. Herramientas populares para verificar encabezados son la extensión de encabezados de HTTP vivo y la extensión Firebug para Firefox, y la extensión de Herramientas de desarrollador para Chrome. Un ejemplo del uso del método/GET POST:

    import mechanize 
    import urllib 
    
    browser = mechanize.Browser() 
    #These are the parameters you've got from checking with the aforementioned tools 
    parameters = {'parameter1' : 'your content', 
           'parameter2' : 'a constant value', 
           'parameter3' : 'unique characters you might need to extract from the page' 
          } 
    #Encode the parameters 
    data = urllib.urlencode(parameters) 
    #Submit the form (POST request). You get the post_url and the request type(POST/GET) the same way with the parameters. 
    browser.open(post_url,data) 
    #Submit the form (GET request) 
    browser.open(post_url + '%s' % data) 
    
  2. reescribir el javascript y ejecutarlo en Python. Echa un vistazo a spidermonkey.

  3. Emula un navegador completo. Echa un vistazo a Selenium y Windmill.

Cuestiones relacionadas