質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.77%

GASでジャパンネット銀行にログインして明細を取得したい

受付中

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 870

contre

score 12

前提・実現したいこと

Google Apps Scriptを使用し、ジャパンネット銀行にログインして、銀行明細をスクレイピングしたいと
思っています。

POSTリクエストしておりますが、以下のレスポンスが返り、ログインできていないようです。

javascriptのため、PhantomJS Cloudなどを利用する必要がありますでしょうか?
また、ログインに成功しているか確認する方法などがもしわかりましたらご回答頂けますと幸いです。

発生している問題・エラーメッセージ

[19-05-24 14:12:18:306 JST] 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">

<head>
<link rel="canonical" href="https://login.japannetbank.co.jp/wctx/LoginAction.do">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta name="format-detection" content="telephone=no">

<title>���O�C�� - �W���p���l�b�g��s</title>
<meta name="description" content="�W���p���l�b�g��s�����ʂւ̃��O�C����ʂł��B">
<link rel="stylesheet" type="text/css" href="/commontpl/css/reset.css" media="screen, print">
<link rel="stylesheet" type="text/css" href="/commontpl/css/common_smt.css?v=170921" media="screen, print">
<link rel="stylesheet" type="text/css" href="/commontpl/css/category/login_smt.css?v=160830" media="screen, print">

<link rel="stylesheet" type="text/css" href="/commontpl/css/common_pc.css" media="screen, print">
<link rel="stylesheet" type="text/css" href="/commontpl/css/category/login_pc.css?v=160830" media="screen, print">
<!--[if lt IE 9]><link rel="stylesheet" type="text/css" href="/commontpl/css/ie.css" media="screen, print"><![endif]-->



<script type="text/javascript">
<!--
(function() {
    document.cookie = "___tk336450=" + encodeURIComponent(Math.random()) + ";path=/;domain=japannetbank.co.jp";
})();
//-->
</script>
<script type="text/javascript" src="/js/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="/js/javalib.js"></script>
<script type="text/javascript" src="/js/jstz.min.js"></script>
<script type="text/javascript" src="/js/check.js"></script>
<script type="text/javascript" src="/js/nb_error.js"></script>
<script type="text/javascript" src="/commontpl/js/cookie.js"></script>

<script type="text/javascript" src="/commontpl/js/category/chmin.js"></script>














<script type="text/javascript">
<!--

function i12b9b68413754f3c(checkFORM) {
    var flg;
    var errFlg = 0;
    var errObj = "";
    var i;

    for(i=0;;i++){
        switch( i ){
            case 0:
                flg = isNumStr(checkFORM.TenNo,3,1);
                if(flg == true){
                    errFlg = 88;
                    break;
                }
                flg = isEmpty(checkFORM.TenNo.value);
                if(flg == true){
                    errFlg = 9;
                    errObj = checkFORM.TenNo;
                }
                break;
            case 1:
                flg = isNumStr(checkFORM.KozaNo,7,1);
                if(flg == true){
                    errFlg = 88;
                    break;
                }
                flg = isEmpty(checkFORM.KozaNo.value);
                if(flg == true){
                    errFlg = 9;
                    errObj = checkFORM.KozaNo;
                }
                break;
            case 2:
                flg = isEmpty(checkFORM.Pw.value);
                if(flg == true){
                    errFlg = 9;
                    errObj = checkFORM.Pw;
                }
                break;

            default:
                errFlg = 99;
        }
        if( errFlg == 99 ){
            errFlg = 0;
            break;
        }else if( errFlg == 88 ){
            break;
        }else if( errFlg != 0 ){
            nbError( errFlg, errObj );
            break;
        }
    }
    if (errFlg != 0){
        return(false);
    }

    if( errFlg == 0 ){
        checkFORM.target='_self';

        checkFORM.__type.value = "0001";


        checkFORM.__uid.value = checkFORM.TenNo.value + checkFORM.KozaNo.value;
        checkFORM.__gid.value = checkFORM.__gid.value;
        checkFORM.__fid.value = "NBG12340";
        checkFORM.__bid.value = "20";
        checkFORM.B_ID.value = "";
        checkFORM.__sid.value = "";
        checkFORM.ShikiCode.value = "";
        checkFORM.LoginIdFlg.value = "0";
        checkFORM.rw_screenparam_button.value = "login";
        checkFORM.TimeZone.value = new Date().toString();
        checkFORM.TimeZoneDetect.value = jstz.determine().name();
        checkFORM.ScreenWidth.value = screen.width;
        checkFORM.ScreenHeight.value = screen.height;
        checkFORM.ScreenColorDepth.value = screen.colorDepth;
        checkFORM.NavigatorPlatform.value = navigator.platform;
    }
    return(true);
}


function toLoginId(){
    var subwin = window.open('','subwin','scrollbars=yes,resizable=yes,status=yes,location=yes');
    subwin.focus();
    document.HOST.target = 'subwin';
    document.HOST.__gid.value = "NBG12340G11";
    document.HOST.__type.value = "0003";
    document.HOST.__sid.value = "00000";
    document.HOST.__uid.value = "00000";
    document.HOST.__fid.value = "NBG12740";
    document.HOST.B_ID.value = "1";
    document.HOST.ShikiCode.value = "";
    document.HOST.rw_screenparam_button.value = "";
    document.HOST.TimeZone.value = "";
    document.HOST.TimeZoneDetect.value = "";
    document.HOST.ScreenWidth.value = "";
    document.HOST.ScreenHeight.value = "";
    document.HOST.ScreenColorDepth.value = "";
    document.HOST.NavigatorPlatform.value = "";
    document.HOST.submit();
}


function toLoginPw(){
    document.HOST.target = '_self';
    document.HOST.__gid.value = "NBG12340G11";
    document.HOST.__type.value = "0003";
    document.HOST.__uid.value = "00000";
    document.HOST.__sid.value = "00000";
    document.HOST.__fid.value = "NBG12511";
    document.HOST.B_ID.value = "1";
    document.HOST.ShikiCode.value = "8000";
    document.HOST.rw_screenparam_button.value = "";
    document.HOST.TimeZone.value = "";
    document.HOST.TimeZoneDetect.value = "";
    document.HOST.ScreenWidth.value = "";
    document.HOST.ScreenHeight.value = "";
    document.HOST.ScreenColorDepth.value = "";
    document.HOST.NavigatorPlatform.value = "";
    document.HOST.submit();
}

function getSefasdIkk(){
    return "A327A715D7C65B206CD1BD1BF4858CB2460E7E7909B646B5AC113A2DCAAE84EF";
}

function showUnsupportedInfo(ua){
    var targetUA = new Array(/Windows 95/, /Windows 98/, /Windows 3\.1/, /Windows NT 4\./, /Windows NT 5\./, /WindowsNT 5\.1;/, /Android 1\./, /Android 2\.0/, /Android 2\.1/, /Android 2\.2/, /Mac OS X 10\.4/, /Mac OS X 10_4/);

    if(ua){
        for(var i=0; i<targetUA.length; i++){
            if(ua.search(targetUA[i])>-1){
                return true;
            }
        }
    }
    return false;
}

$(function(){

    var ua = window.navigator.userAgent;
    document.HOST.userAgent.value = ua ? ua : '';


    $("#chkListToggle").bind("click", function(){
        $("#chkList").toggleClass("on");
    });


    if(showUnsupportedInfo(ua)){
        $("#limitedNews").addClass("on");
    }



    $("#idPw").after("<p id='pwCount' style='display:none;'><span class='count'>0</span>����</p>");
    $("#idPw").bind("keyup keydown change focus blur",function(){
        var pwCount = $(this).val().length;
        $(".count").html(pwCount);
        if(pwCount == 0){
            $("#pwCount").hide();
        }else{
            $("#pwCount").show();
        }
    });



$(function(){
    var params = {
            "ptak": "A327A715D7C65B206CD1BD1BF4858CB2460E7E7909B646B5AC113A2DCAAE84EF"
    };
    $.ajax({
        type : "GET",
        url : "https://login.japannetbank.co.jp" + "/wctx/ifwmjwtra.js",
        dataType : "jsonp",
        jsonpCallback : "fHnfkasSil",
        timeout : 140000,
        data : params,
        success : function(json) {
        },
        error : function(XMLHttpRequest, textStatus, errorThrown){
        },
        complete : function(json) {
        }
    });
});

});
//-->
</script>






        <script src="/common/js/adobe/fdb40d642a7524d383849d9e1c4fbc3f56afb2dd/satelliteLib-27fe9326fc116198f78f7151ce8e9e10bd1f9cc9.js"></script>







<script type="text/javascript">
<!--
(function(){var f=document,e=window,i=e.location.protocol,b=[["src",[i=="https:"?"https:/":"http:/","tjmbk.japannetbank.co.jp/336450/1GW.js"].join("/")],["type","text/javascript"],["async",true]],g="XMLHttpRequest",a=null,j=e[g]&&(a=new e[g]()).withCredentials!==undefined,c=f.createElement("script"),h=f.getElementsByTagName("head")[0];if(j){a.open("GET",b[0][1],b[2][1]);a.withCredentials=true;a.onreadystatechange=function(d){if(a.readyState==4&&a.status==200){c.type="script/meta";c.src=b[0][1];h.appendChild(c);new Function(a.responseText)()}};a.send()}else{setTimeout(function(){for(var d=0,k=b.length;d<k;d++){c.setAttribute(b[d][0],b[d][1])}h.appendChild(c)},0)}})();
(function(){var d=document,c=window,g=c.location.protocol,h=c.navigator.userAgent,e="XMLHttpRequest",a,i=!(/msie|trident|edge/i.test(h))&&c[e]&&(a=new c[e]()).withCredentials!==undefined,b=d.createElement("script"),f=d.getElementsByTagName("head")[0];b.src=(g=="https:"?"https://":"http://")+"cciky.japannetbank.co.jp/336450/jnbcdd.js";b.async=true;if(!i){setTimeout(function(){b.type="text/j

該当のソースコード

function myFunction() {
  // POSTデータ
  var payload = {
    "TenNo" : "XXX",
    "KozaNo" : "XXXXXXX",
    "Pw" : "XXXXXXXX",
    "MenuSelect" : "2" 
  }
  // POSTオプション
  var options = {
    "method" : "POST",
    "payload" : payload,
    "followRedirects" : false
  }

  // ログインURL
  var loginurl = "https://login.japannetbank.co.jp/wctx/LoginAction.do";

  // POST先
  var posturl = "https://login.japannetbank.co.jp/wctx/NBCW2101.do"

  // POSTリクエスト
  var response = UrlFetchApp.fetch(posturl, options);

  // レスポンスヘッダーからcookieを取得
  var cookies = response.getHeaders()["Set-Cookie"];

  // ログインで認証されたcookieはヘッダーで使用
  var headers = { 'Cookie' : cookies };
  options = {
    method : "get",
    headers : headers,
    followRedirects: true, //リダイレクトあり
  };

  // ログイン
  var response = UrlFetchApp.fetch(loginurl, options);

  Logger.log(response)
}

試したこと

下記の質問内容も試しましたが、恐らくPOST先が違う?ために出来ませんでした。
https://teratail.com/questions/72691

補足情報(FW/ツールのバージョンなど)

特に無し。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • papinianus

    2019/05/24 19:00

    クッキーには何か入ってますか?そこのログを吐いてください

    キャンセル

  • contre

    2019/05/24 20:58

    ご確認いただきありがとうございます。
    クッキーは以下のようになっております。(一部伏字としております)

    JSESSIONID=75H32XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX03F00000.nbf01_001; Path=/; Secure

    キャンセル

回答 2

+5

Google Apps Scriptを使用し、ジャパンネット銀行にログインして、銀行明細をスクレイピングしたいと
思っています。

やるべきではありません

銀行のパスワードを自分から外部サイトに書き込んで、それが流出したことで被害を受けた場合、銀行の保証の対象外となります。「Google Appsにパスワードを書く」段階で、やるべきではないことなのです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/25 00:15

    ご回答いただきましてありがとうございます。
    セキュリティの観点から、クラウドサービス上のシステムにパスワードを平文で書くリスクについて、
    大変参考になりました。ありがとうございます。
    今回はテスト用口座を使用しておりますが、実運用ではセキュアな環境で、参照系APIを使用するなど
    充分にセキュリティを考慮した形で実施させていただきたく存じます。

    キャンセル

0

クッキーがとれているとのことなので次にやることを提示します(機械的なログインが可能とは言っていません)

  • フォームのhidden値を全てセットする
  • ページソースからjsのp83c5baad25704224関数の処理を確認し、そこでの値のセットを模倣する

↑この程度の説明で実行できなければ、gasでのログインを(銀行に限らず)実装するのは不可能です。

あと多分「銀行口座をテストで開く」というのは金融関係の法律に触れるリスクがあるので堂々と言うのはやめましょう(マネーロンダリングなど不正な目的で使われかねないので本人が申告した目的以外で使うことだけが合法なはずです)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る