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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

2回答

2609閲覧

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

contre

総合スコア12

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

1クリップ

投稿2019/05/24 05:23

前提・実現したいこと

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

該当のソースコード

GoogleAppsScript

1function myFunction() { 2 // POSTデータ 3 var payload = { 4 "TenNo" : "XXX", 5 "KozaNo" : "XXXXXXX", 6 "Pw" : "XXXXXXXX", 7 "MenuSelect" : "2" 8 } 9 // POSTオプション 10 var options = { 11 "method" : "POST", 12 "payload" : payload, 13 "followRedirects" : false 14 } 15 16 // ログインURL 17 var loginurl = "https://login.japannetbank.co.jp/wctx/LoginAction.do"; 18 19 // POST先 20 var posturl = "https://login.japannetbank.co.jp/wctx/NBCW2101.do" 21 22 // POSTリクエスト 23 var response = UrlFetchApp.fetch(posturl, options); 24 25 // レスポンスヘッダーからcookieを取得 26 var cookies = response.getHeaders()["Set-Cookie"]; 27 28 // ログインで認証されたcookieはヘッダーで使用 29 var headers = { 'Cookie' : cookies }; 30 options = { 31 method : "get", 32 headers : headers, 33 followRedirects: true, //リダイレクトあり 34 }; 35 36 // ログイン 37 var response = UrlFetchApp.fetch(loginurl, options); 38 39 Logger.log(response) 40}

試したこと

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

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

特に無し。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2019/05/24 10:00

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

2019/05/24 11:58

ご確認いただきありがとうございます。 クッキーは以下のようになっております。(一部伏字としております) JSESSIONID=75H32XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX03F00000.nbf01_001; Path=/; Secure
guest

回答2

0

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

思っています。

やるべきではありません

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

投稿2019/05/24 06:21

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

contre

2019/05/24 15:15

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

0

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

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

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

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

投稿2019/05/28 15:27

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問