2015-09-26 16 views
5

Tôi đã viết kịch bản PhantomJS này để tự động đăng nhập vào Instagram. Nó có thể điền thành công vào các trường biểu mẫu và nhấn nút gửi nhưng nó luôn được chuyển hướng trở lại màn hình đăng nhập với thông báo sau:Khắc phục sự cố mã PhantomJS để đăng nhập vào Instagram

Tên người dùng hoặc mật khẩu của bạn không chính xác.

Tôi tích cực 100% rằng thông tin xác thực là chính xác và tôi đã thử bằng nhiều tài khoản Instagram.

Tôi đang chạy kịch bản trên máy Mac từ thiết bị đầu cuối:

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

Lưu ý tùy chọn --ssl-protocol=any. Không có nó, PhantomJS thậm chí không thể mở trang đăng nhập vì HTTPS. Xem this question.

Đây là mã. Tôi dựa trên nó this tutorial, và cập nhật mã để tài khoản cho những thay đổi gần đây trong mã nguồn của trang đăng nhập của Instagram.

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

Và đây là những gì tôi đã cố gắng cho đến nay:

  1. Thiết cookie. Ngoài việc thêm tùy chọn dòng lệnh --cookies-file=cookies.txt, tôi cũng đã thử sử dụng phantom.addCookie trong mã. Dường như không tạo ra bất kỳ sự khác biệt nào.
  2. Gửi các tiêu đề auth một cách rõ ràng. Xem this question.
  3. Thay đổi múi giờ. Không chắc chắn nếu điều này có ý nghĩa. Xem this question.

Rõ ràng PhantomJS có một số vấn đề với SSL. Tôi có nên từ bỏ việc sử dụng nó cho mục đích này không?

Trả lời

0

Tôi nghĩ rằng vấn đề với đăng nhập Instagram là ReactJs. Khi bạn đặt giá trị của trường văn bản, React không thay đổi trạng thái. Nó có nghĩa là đăng nhập và mật khẩu gửi trống khi bạn gửi biểu mẫu.

Tôi không thử, nhưng tôi nghĩ bạn nên điền thông tin nhập văn bản với sự kiện nhấn phím, vì trạng thái nội bộ (React) chỉ thay đổi khi nhập văn bản thay đổi. Đặt giá trị theo cách của bạn sẽ không kích hoạt sự kiện change.

+1

Cảm ơn bạn! Hoạt động hoàn hảo ngay bây giờ. Tôi đã thực hiện những điều chỉnh cần thiết cho kịch bản và xuất bản nó trên Github - [link here] (https://github.com/eafreitas/autoig) – Euripedes

+0

@Euripedes Rất vui được giúp bạn. Thật khó cho tôi để tìm ra rằng mọi thay đổi đầu vào nên được đặt trong trang riêng biệt.đánh giá. –

Các vấn đề liên quan