今現在、僕が登録している@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が作成されるはずが上のようなよくわからないエラーとなってしまいました。
わかるかた、心当たりのある方、ご教授いただけると大変助かります。
よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。