2010-03-30 10 views
6

im tworzenie skryptu z modułem mechanize.browser.python mechanize.browser submit() powiązany problem

jeden problem jest inna rzecz jest ok, ale gdy przedstawienia (formularz), nie działa,

więc stwierdzono pewną część źródłowy podejrzenie.

w źródle html został znaleziony taki jak następujący.

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

im myśli, loginCheck (to) problem podczas przesyłania formularza.

ale jak radzić sobie z tego rodzaju funkcji javascript z modułem Mechanize, więc mogę

skutecznie złożyć formularz i może otrzymać wynik?

Poniżej znajduje się moje bieżące źródło skryptu.

jeśli ktoś może mi pomóc .. bardzo doceniam !!

# -*- 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() 

Odpowiedz

1

Będziesz musiał użyć nieobsługiwanego modułu DOMForm i Spidermonkey (http://pypi.python.org/pypi/python-spidermonkey), aby przetworzyć javascript. Albo możesz dowiedzieć się, co robi loginCheck() i wykonać pracę przed wysłaniem formularza w pythonie. Jeśli loginCheck() po prostu sprawdza dla oczywistej ważności danych logowania, to powinno być całkiem łatwe. Należy zauważyć, że brakuje parametru działania podanego znacznika formularza. Jest prawdopodobnie podany w części javascript.

W zależności od tego, co zamierzasz, łatwiej będzie pracować tylko z urllib2. Możesz założyć statyczny wygląd tej strony internetowej i po prostu opublikować dane za pomocą metod urllib2 i również uzyskać wyniki.

+0

dzięki będę próbował :) – paul

1

onsubmit jest po prostu ignorowana przez mechanize, interpretacja nie jest wykonywana javascript.
Musisz sprawdzić, co loginCheck(); w niektórych przypadkach (Validation) można programowo zrobić to, co robi javascript.

+0

Witam, dziękuję ... jeśli znasz jakiś przykład, może mi ktoś powiesz? jeśli tak, to dobrze dla mnie! dzięki – paul

+0

Patrząc na loginCheck, co on robi? – systempuntoout

+0

Akcja "https://user.buddybuddy.co.kr/Login/Login.asp" jest podana przez javascript. Przykro mi, ale w tym przypadku nie można używać mechanizmu. – systempuntoout

2

Mechanize w ogóle nie obsługuje Javascript. Jeśli koniecznie musisz uruchomić ten skrypt Javascript, spójrz na Selen. Oferuje wiązania Pythona do kontrolowania prawdziwej, działającej przeglądarki, takiej jak Firefox lub IE.

Powiązane problemy