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

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

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

3001閲覧

javascriptでログインが必要なページにログインしたい

hatsu

総合スコア1809

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/07/26 12:41

今現在、僕が登録している@typeというサイトにjavascriptでログインしたいと思い、以下のサイトを参考にしていますがエラーが出てしまいます。
http://tips.hecomi.com/entry/20121229/1356785834

phantomjsはinstall済みでありversion は2.1.1です。

上のサイトに書いてあるコードをそのまま引用したところhatena
にはログインができました。
参考↓

javascript

1var page = require('webpage').create(); 2var fs = require('fs'); 3 4// ページが読み込まれたら page.onCallback を呼ぶ 5page.onInitialized = function() { 6 page.evaluate(function() { 7 document.addEventListener('DOMContentLoaded', function() { 8 window.callPhantom('DOMContentLoaded'); 9 }, false); 10 }); 11}; 12 13// ページが読み込まれたら登録した関数の配列を順次実行してくれるクラス 14var funcs = function(funcs) { 15 this.funcs = funcs; 16 this.init(); 17}; 18funcs.prototype = { 19 // ページが読み込まれたら next() を呼ぶ 20 init: function() { 21 var self = this; 22 page.onCallback = function(data){ 23 if (data === 'DOMContentLoaded') self.next(); 24 } 25 }, 26 // 登録した関数の配列から1個取り出して実行 27 next: function() { 28 var func = this.funcs.shift(); 29 if (func !== undefined) { 30 func(); 31 } else { 32 page.onCallback = function(){}; 33 } 34 } 35}; 36 37// 順次実行する関数 38new funcs([ 39 function() { 40 console.log('ログイン処理'); 41 page.open('https://www.hatena.ne.jp/login'); // 次ページヘ 42 }, 43 function() { 44 console.log('ログイン画面'); 45 page.evaluate(function() { 46 document.getElementById('login-name').value = 'はてなの ID'; 47 document.querySelector('.password').value = 'パスワード'; 48 document.querySelector('form').submit(); // 次ページヘ 49 }); 50 }, 51 function() { 52 console.log('ログイン中画面'); 53 // 自動で次ページヘ 54 }, 55 function() { 56 console.log('ログイン後画面'); 57 page.render('mypage.png'); 58 // ログイン後の HTML を書き出し 59 var html = page.evaluate(function() { 60 return document.getElementsByTagName('html')[0].innerHTML; 61 }); 62 fs.write('mypage.html', html, 'w'); 63 phantom.exit(); 64 } 65]).next();

このコードを応用して@typeの求人にログインしようとし作成したのが以下のコードです。

javascript

1var page = require('webpage').create(); 2var fs = require('fs'); 3 4// ページが読み込まれたら page.onCallback を呼ぶ 5page.onInitialized = function() { 6 page.evaluate(function() { 7 document.addEventListener('DOMContentLoaded', function() { 8 window.callPhantom('DOMContentLoaded'); 9 }, false); 10 }); 11}; 12 13// ページが読み込まれたら登録した関数の配列を順次実行してくれるクラス 14var funcs = function(funcs) { 15 this.funcs = funcs; 16 this.init(); 17}; 18funcs.prototype = { 19 // ページが読み込まれたら next() を呼ぶ 20 init: function() { 21 var self = this; 22 page.onCallback = function(data){ 23 if (data === 'DOMContentLoaded') self.next(); 24 } 25 }, 26 // 登録した関数の配列から1個取り出して実行 27 next: function() { 28 var func = this.funcs.shift(); 29 if (func !== undefined) { 30 func(); 31 } else { 32 page.onCallback = function(){}; 33 } 34 } 35}; 36 37// 順次実行する関数 38new funcs([ 39 function() { 40 console.log('ログイン処理'); 41 // page.open('https://www.hatena.ne.jp/login'); // 次ページヘ 42 page.open('https://type.jp/login.do'); // 次ページヘ 43 }, 44 function() { 45 console.log('ログイン画面'); 46 page.evaluate(function() { 47 document.getElementsByName("j_username").value = 'e-mail'; 48 document.getElementsByName("j_password").value = 'password'; 49 document.querySelector('form').submit(); // 次ページヘ 50 }); 51 }, 52 function() { 53 console.log('ログイン中画面'); 54 // 自動で次ページヘ 55 }, 56 function() { 57 console.log('ログイン後画面'); 58 // page.render('mypage.png'); 59 // ログイン後の HTML を書き出し 60 var html = page.evaluate(function() { 61 return document.getElementsByTagName('html')[0].innerHTML; 62 }); 63 fs.write('type.html', html, 'w'); 64 // console.log(html) 65 phantom.exit(); 66 } 67]).next();

上のコードを実行すると、うまく行かないです。
上のコードを実行した時のログが以下です。

terminal

1ログイン処理 2ログイン画面 3[object Object] 4 5 https://www.googletagmanager.com/gtm.js?id=GTM-T5T9:77 in error 6 https://www.googletagmanager.com/gtm.js?id=GTM-T5T9:84 in onerror 7[object Object] 8 9 https://www.googletagmanager.com/gtm.js?id=GTM-T5T9:77 in error 10 https://www.googletagmanager.com/gtm.js?id=GTM-T5T9:85 in onerror 11ReferenceError: Can't find variable: SURFPOINT 12 13 https://type.jp/login.do:1 in global code 14 :0 in insertBefore 15 https://www.googletagmanager.com/gtm.js?id=GTM-T5T9:87 16 https://www.googletagmanager.com/gtm.js?id=GTM-T5T9:88 17ログイン中画面 18ReferenceError: Can't find variable: uid 19 20 https://kitchen.juicer.cc/?color=VpkHy7h+lRo=:991 21[object Object] 22 23 https://www.googletagmanager.com/gtm.js?id=GTM-T5T9:77 in error 24 https://www.googletagmanager.com/gtm.js?id=GTM-T5T9:85 in onerror 25

本来ならログイン後画面もconsole.logで出力されtype.htmlが作成されるはずが上のようなよくわからないエラーとなってしまいました。

わかるかた、心当たりのある方、ご教授いただけると大変助かります。
よろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

Javascriptという条件に沿わないかもしれませんが、

macなら、AppleScriptの方がアプリケーション出力もできて良いと思います。

投稿2017/07/28 22:13

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

自サイト以外のページをブラウザベースで読み込んでjavascriptで
操作するイメージでしょうか?
むしろセキュリティ上それを許しているサイトの方が少ないと思いますが

投稿2017/07/27 02:43

yambejp

総合スコア114583

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

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

hatsu

2017/07/27 03:06

yambejp様 回答ありがとうございます。 おっしゃる通りで、自サイト以外のページを読み込んでjavascriptで操作するイメージです。 セキュリティ上それは難しいことが多いんですね。 無知でした。ありがとうございます。 これは、phpのcURLやGoutteでも同じでらっしゃいますでしょうか?
guest

0

ベストアンサー

普通にサイトからはログインできるんですよね?

エラー内容からの推測でしかないのですが、
GOOGLEタグマネージャに必要な情報をログイン時に当該サイトが自動で送信していて
外部の私的ツールからのログインには対応してない、とか・・?

投稿2017/07/27 01:25

編集2017/07/27 01:30
m.ts10806

総合スコア80765

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

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

hatsu

2017/07/27 01:35

回答ありがとうございます。 普通にサイトからのログインは可能でございますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問