2015-09-26 10 views
5

このPhantomJSスクリプトを書いて、Instagramへのサインインを自動化しました。フォームフィールドに入力して送信ボタンを押すと、次のメッセージが表示され、常にログオン画面にリダイレクトされます。PhantomJSコードでInstagramにサインインするトラブルシューティング

ユーザー名またはパスワードが間違っています。

資格情報が正しいと私は100%肯定的であり、私は複数のInstagramアカウントで試しました。

私は、端末からのMac上でスクリプトを実行している:

$ phantomjs --ssl-protocol=any --cookies-file=cookies.txt script.js username password 

--ssl-protocol=anyオプションに注意してください。それがなければ、PhantomJSはHTTPSのためにログインページを開くことさえできません。 this questionを参照してください。

ここにコードがあります。私はthis tutorialを基にし、Instagramのログインページのソースコードの最近の変更を考慮してコードを更新しました。

  1. がクッキーを設定:

    var system = require('system'); 
    var username = system.args[1]; 
    var password = system.args[2]; 
    var page = require('webpage').create(); 
    
    page.open('https://instagram.com/accounts/login/', 
        function (status) { 
         if (status === "success") { 
          page.evaluate(function (uid, pwd) { 
           var username_field = document.getElementById('lfFieldInputUsername'); 
           username_field.value = uid; 
           var password_field = document.getElementById('lfFieldInputPassword'); 
           password_field.value = pwd; 
          }, username, password); 
    
          var point = page.evaluate(function() { 
           var element = document.getElementsByTagName('button')[0]; 
           var rect = element.getBoundingClientRect(); 
           return { 
            x: rect.left + Math.floor(rect.width/2), 
            y: rect.top + Math.floor(rect.height/2) 
           }; 
          }); 
          page.render('before-submit.png'); 
          page.sendEvent('click', point.x, point.y); 
         } 
         setTimeout(function() { 
          var error = page.evaluate(function() { 
           var element = document.getElementById('errorAlert'); 
           var error_message = false; 
           if (element !== null) { 
            error_message = element.innerText.trim(); 
           } 
           return error_message; 
          }); 
    
          page.render('after-submit.png'); 
          if (!error) { 
           console.log('Login Successful: ' + page.url); 
          } else { 
           console.log('Login Failed: ' + error); 
          } 
    
          phantom.exit(0); 
         }, 5000); 
        } 
    ); 
    

    そして、ここでは、私がこれまで試したものです。 --cookies-file=cookies.txtコマンドラインオプションを追加するだけでなく、phantom.addCookieもコード内で試してみました。何の違いもありませんでした。

  2. authヘッダーを明示的に送信しています。 this questionを参照してください。
  3. タイムゾーンを変更しています。これが意味をなさないかどうかはわかりません。 this questionを参照してください。

明らかに、PhantomJSにはSSLに関するいくつかの問題があります。私はちょうどこの目的のためにそれを使用してあきらめるべきですか?

答えて

0

Instagramログインの問題はReactJだと思います。テキストフィールドの値を設定すると、Reactは状態を変更しません。フォームを送信すると、ログインとパスワードの送信が空であることを意味します。

私は試しませんでしたが、内部コンポーネント(React)の状態が入力テキストの変更時にのみ変化するため、テキスト入力をkeypressイベントで入力する必要があります。あなたの値を設定すると、イベントは発生しませんchangeイベント。

+1

ありがとうございました!今は完璧に動作します。私はスクリプトに必要な調整を行い、Githubに掲載しました - [リンクはこちら](https://github.com/eafreitas/autoig) – Euripedes

+0

@Euripedes非常にお手伝いします。すべての入力の変更を別のpage.evaluateに配置する必要があることはわかりにくいです。 –

関連する問題