2017-03-18 167 views
0

我是新来的python,我无法生成正确的代码来使用python请求登录到网站。使用python请求登录到网站使用ajax json post

从网站

<form autocomplete="off" class="js-loginFormModal"> 
             <input type="hidden" class="js-  redirect" name="redirect" value="bn_vLe6OsoRXl4E4LEaOwGkUCvazta7iTkG81ShqumA." /> 
         <input type="hidden" name="token" id="token"  value="MTQ4OTg2MzYwMzCaZm653OAL-mKayzhg_4wCyEBXDqZBQUJxdbLLF- foi6EdPeKBgIVz97pUew9YgKPmxiW2NDzrAewdtIJWrBM." /> 
         <input type="hidden" name="remember_me" value="1" /> 
         <input type="hidden" name="from"  value="pc_login_modal_:login"> 

       <div class="leftSide floatLeft loginColumnLeft-en"> 
        <p class="signinError" style="display:none;"></p> 
        <p id="signinLoggingin" style="display:none;">Logging in...</p> 
        <div><input id="usernameModal" placeholder="Username (6+ characters)" class="js-signinUsernameModal signup_field" name="username" maxlength="50" type="text" value=""></div> 
        <div><input id="passwordModal" placeholder="Password (6+ characters)" class="js-signinPasswordModal signup_field" name="password" type="password" value=""></div> 
        <div class="loginAccessRemember"> 
         <input type="checkbox" checked id="signinRemember" /> 
         <label for="signinRemember">Remember me on this computer<br /> 
          <span class="loginAccessRememberInfo">(not recommended on public or shared computers)</span> 
         </label> 
        </div> 
        <div id="signinSubmit" class="orangeButton buttonBase js-loginSubmitModal">Login</div> 
        <div class="leftCol"> 
         <ul> 
          <li> 
                  <li><a id="signinForgotpassword" href="/front/lost_password" onclick="ga('send', 'event', 'Login Page', 'click', 'Lost Password');">Forgot Username or Password?</a></li> | 
          <li><a id="signinConfirmationEmail" href="/front/resend_confirmation_email" onclick="ga('send', 'event', 'Login Page', 'click', 'Resend Confirmation');">Resend confirmation email</a></li> 
         </ul> 
        </div> 
       </div> 

       <div class="rightSide floatRight loginColumnRight-en"> 
        <h2 class="loginAccessTitle-en">Not a free member yet?</h2> 
        <span class="loginAccessMessage loginAccessMessageRight">Here's what you're missing out on!</span><br /><br /> 
        <ul class="clearfix"> 
         <li><i class="mark registerSprite enabled"></i><span class="tab1">Download Videos</span></li> 
         <li><i class="mark registerSprite enabled"></i><span>Post Comments</span></li> 
         <li><i class="mark registerSprite enabled"></i><span class="tab3">Add Favorites</span></li> 
         <li><i class="mark registerSprite enabled"></i><span class="tab4">Create Playlists</span></li><br> 
         <li>And many more!</li> 
        </ul> 
        <br/><a class="buttonBase greyButton" id="signupButtonId" href="/create_account_select">Sign Up</a> 
       </div> 
      </form> 

这是由JavaScript “JS-loginFormModal”

function loginAjax() { 
    $j.ajax({ 
    type: "POST", 
    url: "/front/authenticate", 
    cache: false, 
    dataType: "json", 
    data: $j(".js-loginForm").serialize(), 
    success: function(a) { 
     if (a.premium_redirect_cookie == "0") { 
     if (a.redirect) { 
      document.location.assign(a.redirect) 
     } else { 
      $j(".signinError").show().text(a.message) 
     } 
     } else { 
     $j.ajax({ 
      url: premiumRedirectCookieURL, 
      cache: false, 
      crossDomain: true, 
      xhrFields: { 
      withCredentials: true 
      }, 
      success: function() { 
      if (a.redirect) { 
       document.location.assign(a.redirect) 
      } else { 
      $j(".signinError").show().text(a.message) 
     } 
     } 
    }) 
    } 
} 
    }); 
    return false 
} 
head.ready(document, function() { 
    var a = false; 
    $j(".js-loginSubmit").on("click", function(b) { 
    b.preventDefault(); 
    loginAjax() 
    }); 
    $j("input.js-signinUsername, input.js-signinPassword").on("keydown",   function(b) { 
    if (!a) { 
     if (b.which == 13) { 
     loginAjax() 
     } 
     a = true 
    } 
    }); 
    $j("input.js-signinUsername, input.js-signinPassword").on("keyup",  function(b) { 
    if (a) { 
     a = false 
    } 
    }) 
}); 

我当前的Python代码(Python的2.6.6)中提到的AJAX声明的形式代码给我的结果是“{”message“:”Session timed out - reload and try again“}”

#!/usr/bin/python 
from requests import Session 
import requests 

http_proxy = "http://ip:3128" 
https_proxy = "http://ip:3128" 
ftp_proxy = "http://ip:3128" 

proxyDict = { 
        "http" : http_proxy, 
        "https" : https_proxy, 
        "ftp" : ftp_proxy 
     } 

session = requests.Session() 
headers = { 
     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)  AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36', 
    'Accept':  'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' 
} 
payload = { 
    'remember_me': '0', 
    'username': 'user', 
    'password': 'pass' 
    } 
login_link = 'website/front/authenticate' 
link = 'http://website' 
login = session.post(url=login_link, data=payload, allow_redirects=True, headers=headers,proxies=proxyDict) 

print (login.text) 

response2 = session.get(url=link, headers=headers,proxies=proxyDict) 

#print response2.content 


#print(r2.text).encode('utf-8').strip() #TEXT/HTML 
#print(r.status_code, r.reason) 

I认为我从我的有效载荷中遗失了东西。我不知道是否需要将json指定为有效内容的格式,或者是否需要序列化任何内容。

+0

我发现如何得到它的工作: – Linax

回答

0

溶液以下

#!/usr/bin/python 
from requests import Session 
import requests 
import json 
import re 


http_proxy = "http://ip:3128" 
https_proxy = "http://ip:3128" 
ftp_proxy = "http://ip:3128" 

proxyDict = { 
         "http" : http_proxy, 
         "https" : https_proxy, 
          "ftp" : ftp_proxy 
      } 

headers = { 
     'Accept': 'application/json, text/javascript, */*; q=0.01', 
     'Accept-Encoding': 'gzip, deflate', 
     'Accept-Language': 'en-US,en;q=0.8', 
     'Connection': 'keep-alive', 
     'Content-Length': '209', 
     'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 
     'Host': 'www.website.com', 
     'Origin': 'http://www.website.com', 
     'Referer': 'http://www.website.com/login', 
     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)  AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36', 
     'X-Requested-With': 'XMLHttpRequest', 
} 


login_link = 'http://www.website.com/front/authenticate' 
link = 'http://www.website.com/' 

with requests.Session() as r: 
     s = r.get(url=link, proxies=proxyDict) 

     token = re.findall(r'token" value.*', s.text)[0] 
     token = token.split('=')[1] 
     token = token.split('"')[1] 

     redirect = re.findall(r'redirect" value.*', s.text)[0] 
     redirect = redirect.split('=')[1] 
     redirect = redirect.split('"')[1] 
     payload = { 
       'loginpage': '1', 
       'redirect': redirect, 
       'token': token, 
       'username': 'user', 
       'password': 'pass' 
     } 

     login = r.post(url=login_link, data=payload, allow_redirects=True, headers=headers, proxies=proxyDict) 

     print (login.content)