2013-07-22 32 views
1

我正在使用機械化以下面的表單登錄網站。mechanize.Browser未能提交?

<form id="loginForm"> 
     <div class="signinTitle" > 
      <span class="regTips" id="logTips"></span> 
     </div> 
     <ul class="inputBox"> 
       <li class="loginname"> 
        <label>username/email</label> 
        <input id="nameInput" type="text" name="loginname" maxlength="30" value=""> 
       </li> 
       <li class="password"> 
        <label>password</label> 
        <input id="pwdInput" type="password" name="password" maxlength="16" value=""> 

       </li> 
       <li id="chechbox"> 
        <p class="tip"> 
         <input name="remember" type="checkbox" checked="checked"/> 
         <span>remember </span> 
         <span class="forgetPwd"><a href="http://passport.infzm.com/passport/resetPassWord" >forget password</a></span> 
        </p> 
       </li> 
       <li class="submit clearfix"> 
        <input type="submit" id="submitbutton" title="submit" value="login"></input> 
       </li> 
      </ul> 
    </form> 

和我用於登錄的代碼如下

browser = mechanize.Browser() 
browser.open(url) 
browser.select_form(nr=1) 
browser['loginname']=username 
browser['password']=password 
browser.submit() 
browser.read() 

但read()方法返回相同的HTML作爲登錄頁面。這裏有什麼問題。

+0

它使用JavaScript通過POST提交到另一個端點。看看http://images.infzm.com/js/com/infzm/passport/passport.js?v=4並搜索'login = function(form)'看看它在做什麼。 – sberry

回答

1

JavaScript上的images.infzm.com/js/com/infzm/passport/passport.js?v=4顯示錶單通過POST提交到/passport/login。你需要做一些機械化的詭計才能使它起作用。基本上,你需要找出一種方法來改變表單的動作和方法(我不記得是可能的),還是不用表單就可以自己發表帖子(更容易做到)。然後,直接瀏覽到http://www.infzm.com/,因爲這是JavaScript在登錄成功時重定向到的內容。

+0

謝謝你的回答,在這種情況下,'urllib2'會做這個工作嗎? – flyingfoxlee

+0

我必須再次感謝你,你真的幫了我很多,爲我節省了很多時間。我通過使用'requests'工作。 – flyingfoxlee

+0

好聽。享受:)而要求真的是一個偉大的圖書館。 – sberry