javascript - 如何使用Python登录网页?

标签 javascript python pentaho

我在 localhost\administration 有一个登录页面,我使用此代码登录:

import urllib
import http.cookiejar as ckj
lg = {'nick':'john','pass':'password'}
url = 'http://localhost/administration/'
cj = ckj.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
lgdata = urllib.parse.urlencode(lg).encode("utf-8")
opener.open(url,lgdata)
res = opener.open(url)
print(res.read())

该页面只有 PHP 代码。 现在我想登录此页面 localhost:8080/pentaho/Login,但该页面使用 javascript 进行登录,我不明白应该如何以及应将哪些数据发送到该页面。

我知道我需要 url = localhost:8080/pentaho/Loginlg = {'j_username':'username','j_password':'password'},但这不是我需要发送到操作的全部信息,否则这是不正确的。

以下是登录表单的 html 代码:

<form name="login" id="login" action="j_spring_security_check" method="POST"
onkeyup="if(window.event && window.event.keyCode && window.event.keyCode==13)
{var buttonToClick = document.getElementById('loginbtn'); 
if(buttonToClick){ buttonToClick.click();}}">
    <input id="j_username" name="j_username" type="text" placeholder="" autocomplete="off">
    <input id="j_password" name="j_password" type="password" placeholder="" autocomplete="off">
    <button type="submit" id="loginbtn" class="btn">Login</button>
     <input type="hidden" name="locale" value="en_US">
</form>

这是页面的 javascript

<script type="text/javascript">
  function toggleEvalPanel() {
    var evaluationPanel = $("#evaluationPanel");
    evaluationPanel.toggleClass("afterSlide");
    $("#eval-arrow").toggleClass("closed");
  }
  function bounceToReturnLocation() {
    // pass
    var locale = document.login.locale.value;
    var returnLocation = 'http\x3A\x2F\x2Flocalhost\x3A8080\x2Fpentaho\x2Findex.jsp';
    if (returnLocation != '' && returnLocation != null) {
      window.location.href = returnLocation;
    } else {
      window.location.href = window.location.href.replace("Login", "Home") + "?locale=" + locale;
    }
  }
  function doLogin() {
    // if we have a valid session and we attempt to login on top of it, the    server
    // will actually log us out and will not log in with the supplied credentials, you must
    // login again. So instead, if they're already logged in, we bounce out of here to
    // prevent confusion.
    if (false) {
      bounceToReturnLocation();
      return false;
    }
    jQuery.ajax({
      type: "POST",
      url: "j_spring_security_check",
      dataType: "text",
      data: $("#login").serialize(),
      error:function (xhr, ajaxOptions, thrownError){
       if (xhr.status == 404) {
          // if we get a 404 it means login was successful but intended resource does not exist
          // just let it go - let the user get the 404
          bounceToReturnLocation();
          return;
        }
        //Fix for BISERVER-7525
        //parsereerror caused by attempting to serve a complex document like a prd report in any presentation format like a .ppt
        //does not necesarly mean that there was a failure in the login process, status is 200 so just let it serve the archive to the web browser.
        if (xhr.status == 200 && thrownError == 'parsererror') {
          document.getElementById("j_password").value = "";
          bounceToReturnLocation();
          return;
        }
        // fail
        $("#loginError").show();
        $("#loginError button").focus();
      },
      success:function(data, textStatus, jqXHR){
        if (data.indexOf("j_spring_security_check") != -1) {
          // fail
          $("#loginError").show();
          $("#loginError button").focus();
          return false;
        } else {
          document.getElementById("j_password").value = "";
          bounceToReturnLocation();
        }
      }
    });
    return false;
  }
  function loginAs (username, password) {
    $("#j_username").attr("value", username);
    $("#j_password").attr("value", password);
    doLogin();
  }
  $(document).ready(function(){
    $("#login").submit(doLogin);
    if (false) {
      bounceToReturnLocation();
    }
    $("#login-background").fadeIn(1000, function() {
      $("#login-logo").addClass("afterSlide");
      $("#animate-wrapper").addClass("afterSlide");
      $("#j_username").focus();
      $("#login-footer").addClass("afterSlide");
    });
  });
</script>

最佳答案

看来您应该发出 AJAX 请求。你可以尝试这样的事情:

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0',
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'X-Requested-With': 'XMLHttpRequest'
}

login_url = '/pentaho/j_spring_security_check'
s = requests.Session()
data = {'j_username': YOURUSERNAME, 'j_password': YOURPASSWORD}
s.post(login_url, data=login_data)

content = s.post(url, data=data, headers=headers)
print content

关于javascript - 如何使用Python登录网页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36940398/

相关文章:

python - 如何安排作业(Django、Python)

sql-server - 将 Pentaho 连接到 MS SQL Server( native )

javascript - Typescript 使用 Rx.js 过滤器运算符区分联合类型?

javascript - 在 React.js 中使用 Deferred 或在我的 success 函数中使用回调

python - 使用 Python 在列表中查找匹配的字典对

python - cython_bbox.so : undefined symbol: _Py_ZeroStruct

hadoop - 尝试从HDFS读取文件时,Pentaho的 “Hadoop File Input”(勺子)始终显示错误

windows - 无法在 pentaho 数据集成中找到日志文件

javascript - 诸如socket通信之类的东西需要utf-8编码吗?

javascript - Webpack 外部依赖