2010-03-30 14 views
6

im making some script with mechanize.browser module.Problema relacionado con python mecanize.browser submit()

uno de problema es todo lo demás está bien, pero cuando enviar el formulario(), que no está trabajando,

así que se encontró alguna parte fuente de sospecha.

en la fuente html me han encontrado como siguiente.

<form method="post" onsubmit="return loginCheck(this)" name="FRMLOGIN"/> 

im thinking, loginCheck (this) creando un problema al enviar el formulario.

pero la forma de manejar este tipo de función javascript con el módulo de mecanizar, por lo que puedo

presentar con éxito la forma y el resultado puede recibir?

siguiendo es mi fuente de script actual.

si alguien me puede ayudar ... Mucho aprecio !!

# -*- coding: cp949-*- 
import sys,os 
import mechanize, urllib 
import cookielib 
from BeautifulSoup import BeautifulSoup,BeautifulStoneSoup,Tag 
import datetime, time, socket 
import re,sys,os,mechanize,urllib,time 


br = mechanize.Browser() 
cj = cookielib.LWPCookieJar() 
br.set_cookiejar(cj) 

# Browser options 
br.set_handle_equiv(True) 
br.set_handle_gzip(True) 
br.set_handle_redirect(True) 
br.set_handle_referer(True) 
br.set_handle_robots(False) 

# Follows refresh 0 but not hangs on refresh > 0 
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1) 

# Want debugging messages? 
br.set_debug_http(True) 
br.set_debug_redirects(True) 
br.set_debug_responses(True) 

# User-Agent (this is cheating, ok?) 
br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.6')] 
br.open('http://user.buddybuddy.co.kr/Login/LoginForm.asp?URL=') 
html = br.response().read() 
print html 

br.select_form(name='FRMLOGIN') 
print br.viewing_html() 
br.form['ID']='zero1zero2' 
br.form['PWD']='012045' 
br.submit() 

print br.response().read() 

Respuesta

1

tendrá que utilizar el módulo no actualizado DOMForm y Spidermonkey (http://pypi.python.org/pypi/python-spidermonkey) para procesar javascript. O averigua qué está haciendo loginCheck() y realiza su trabajo antes del envío de formularios en python. Si loginCheck() simplemente comprueba la validez obvia de los datos de inicio de sesión, eso debería ser bastante fácil. Tenga en cuenta que falta el parámetro de acción de la etiqueta de formulario establecida. Probablemente se da en la parte de javascript.

Dependiendo de lo que piense, podría ser más fácil trabajar solo con urllib2. Puede asumir una apariencia estática de esa página web y solo publicar datos con los métodos de urllib2 y también obtener los resultados.

+0

gracias lo intentaré :) – paul

1

onsubmit es simplemente ignorado por mecanizar, ninguna interpretación de JavaScript se realiza.
Debe verificar qué loginCheck(); en algunos casos limitados (Validación) puede hacer programáticamente lo que javascript hace.

+0

hola gracias ... si conoce algún ejemplo, ¿alguien me podría decir algo? si es así, ¡una buena referencia para mí! gracias – paul

+0

En cuanto a loginCheck, ¿qué hace? – systempuntoout

+0

La acción "https://user.buddybuddy.co.kr/Login/Login.asp" está dada por javascript. Lo siento pero no se puede usar mecanizar en este caso. – systempuntoout

2

mecanizar no admite Javascript en absoluto. Si absolutamente tiene que ejecutar ese Javascript, investigue Selenium. Ofrece enlaces de python para controlar un navegador real y en ejecución, como Firefox o IE.

Cuestiones relacionadas