2015-09-26 22 views
5

Instagram'da oturum açmayı otomatikleştirmek için bu PhantomJS komut dosyasını yazdım. Form alanlarını başarıyla doldurabilir ve gönderme düğmesine basabilir, ancak her zaman aşağıdaki iletiyle oturum açma ekranına yeniden yönlendirilir:Instagram'da oturum açmak için PhantomJS kodunda sorun giderme

Kullanıcı adınız veya parolanız yanlış.

Kimlik bilgilerinin doğruluğundan% 100 olumluyım ve bunu birden çok Instagram hesabıyla denedim.

Ben terminalden Mac'te senaryoyu çalıştırıyorum:

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

Not --ssl-protocol=any seçeneği. Onsuz PhantomJS, HTTPS'den dolayı giriş sayfasını bile açamaz. Bakınız this question.

İşte kod. this tutorial'u temel aldım ve Instagram'ın giriş sayfasının kaynak kodundaki son değişiklikleri hesaba katmak için kodu güncelledim.

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); 
    } 
); 

Ve burada şimdiye kadar çalıştığım buydu:

  1. Ayar kurabiyeler. --cookies-file=cookies.txt komut satırı seçeneğini eklemenin yanı sıra, kodu phantom.addCookie denedim. Hiç bir fark yaratmıyor gibiydi.
  2. Auth başlıklarını açıkça gönderiyor. Bakınız this question.
  3. Saat dilimini değiştirme. Bunun mantıklı olup olmadığından emin değilim. Bakınız this question.

Görünüşte PhantomJS'nin SSL ile ilgili bazı sorunları var. Bunu bu amaçla kullanmam mı gerekiyor?

cevap

0

Instagram girişiyle sorunun ReactJs olduğunu düşünüyorum. Metin alanının değerini ayarladığınızda, React durumu değiştirmez. Formu gönderdiğinizde oturum açma ve şifre gönderilmesi anlamına gelir.

Denemedim, ancak tuş girişiyle metin girişlerini doldurmanız gerektiğini düşünüyorum, çünkü dahili bileşen (React) durumu yalnızca metin girişleri değiştirildiğinde değişiyor. Sizin için değeri ayarlama, change etkinliğini tetiklemez.

+1

Teşekkür ederiz! Şimdi mükemmel çalışıyor. Komut dosyası için gerekli ayarlamaları yaptım ve bunu Github'da yayınladım - [link here] (https://github.com/eafreitas/autoig) – Euripedes

+0

@Euripedes Size yardımcı olmaktan çok memnun oldum. Her girdi değişikliğinin ayrı bir page.evaluate dosyasına yerleştirilmesi gerektiğini anlamak benim için zordu. –

İlgili konular