2010-09-26 18 views
3

im faire un script avec le module mechanize.browser.python mechanize javascript soumettre le problème du bouton!

un problème est tout autre chose est ok, mais quand la forme submit(), il ne fonctionne pas,

donc j'a trouvé une partie de la source de soupçons.

dans la source html j'ai été trouvé comme suit.

pensée im, loginCheck (ce) problème à faire quand soumettre forme.

mais la façon de gérer ce genre de fonction javascript avec module mécaniser, donc je peux

soumettre avec succès la forme et peut recevoir résultat?

Voici un extrait de websource qui a rapport avec loginCheck (this) javascript.

 function init(){ 
     FRMLOGIN.ID.focus(); 
    } 

    function loginCheck(f){ 
     if(chkNull(f.ID, "아이디를")) 
      return false; 

     if(chkNull(f.PWD, "패스워드를")) 
      return false; 

     //f.target = "ifrmLoginHidden"; 
     f.action = (f.SECCHK.checked) ? "https://user.buddybuddy.co.kr/Login/Login.asp" : "http://user.buddybuddy.co.kr/Login/Login.asp"; 
    } 

je sais mécaniser ne supporte pas javascript, donc je veux faire progammatically loginCheck() fonction

avec le code python mécaniser.

quelqu'un veut vous certains me aider à faire cette fonction javascript pour python mécaniser

code traduit?

si correctement peut vous connecter avec le site Web?

si tellement appréciez!

# -*- 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']='psh7943' 
br.form['PWD']='qkrthgus' 
br.submit() 

print br.response().read() 

si quelqu'un peut m'aider .. beaucoup apprécié !!

+4

S'il vous plaît, dites-moi ce sont tout simplement utilisateur dummy/pass chaînes. – ars

Répondre

4

Vous pouvez passer par le processus de connexion à la main dans votre navigateur et vérifier (en utilisant par exemple Firebug dans Firefox, Developer Tools dans Chrome, etc.) que les demandes sont envoyées au site lorsque vous appuyez sur le bouton OK. Généralement, il s'agit d'une demande POST avec des données extraites du formulaire de connexion. Vérifiez les données sont envoyées à cette demande et d'exécuter votre demande de poste avec:

mechanize.urlopen(URL, POST_DATA). 

Vous pouvez extraire POST_DATA (et POST_URL) de l'objet sous forme de mécaniser en utilisant:

form.click_request_data() 

mais vous devrez peut-être faire quelques modifications.

exemple très simple:

br.select_form(name='form_name') 
br.form['login']='login' 
br.form['pass']='pass' 
post_url, post_data, headers = br.form.click_request_data() 
mechanize.urlopen(post_url, post_data) 
+0

Que faire si cela produit 'urllib2.HTTPError: erreur HTTP 414: requête-URI trop grand', mais les demandes fonctionne bien dans un navigateur normal? – Brandon