Instagram tải lên video từ pc


8

Tôi đang cố gắng tự động hóa quá trình tải lên video / hình ảnh trên instagram (không sử dụng API riêng). Hiện tại tôi đã tự động tải lên hình ảnh và tôi đang cố gắng làm điều tương tự cho các video. Tôi đang làm điều này với electronNodejs.

để nhấp vào nút tải lên và chọn một hình ảnh tôi thực thi mã này thực sự hoạt động tốt.

const fs = require('fs'),
      {remote} = require('electron'),
      clipboardy    = require('clipboardy'),
      BrowserWindow = remote.BrowserWindow;

const LOAD_IMAGE = '.UP43G',
      NEW_POST = '.glyphsSpriteNew_post__outline__24__grey_9.u-__7';

function get_files(path){
    return fs.readdirSync(path, { withFileTypes: true })
    .filter(dirent => dirent.isFile())
    .map(dirent => __dirname + '/../../' + path + '/' + dirent.name);
}

function randomRange(min, max) {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

function createWindow (session_id, hidden) {
    win = new BrowserWindow({
        width: 500,
        height: 500
    });
    win.loadURL('https://www.instagram.com');
    return win;
}

////select the files to upload////

var files = UPLOAD_POST_FOLDER_CUSTOM
var file_to_upload = files[randomRange(0, files.length - 1)];

///////////////////////////////////////

function async upload_image(){
    // click the upload button on the page
    await electron_window.webContents.executeJavaScript(`
        async function click_upload_button(){
            let new_post_button = document.querySelector('${NEW_POST}');
            await sleep(1000);
            new_post_button.click()
        }
        click_upload_button();
    `);
    // write the path of the file and press enter in the file selector
    await sleep(500);
    let previous_clipboard = clipboardy.readSync();
    clipboardy.writeSync(file_to_upload);
    await fake_input.keyTap('l', 'control');
    await fake_input.keyTap('v', 'control');
    await fake_input.keyTap('enter');
    clipboardy.writeSync(previous_clipboard);       
    await sleep(2000);

}

Mã này hoạt động tốt cho hình ảnh .jpg. Vấn đề mà tôi gặp phải là trong quá trình tải lên, khi nó mở bộ chọn tệp để chọn thứ gì đó để đăng thì nó không nhận ra video . Tôi đã thử tất cả các phần mở rộng video có thể.

Tôi cũng đã cố gắng viết đường dẫn tệp trong bộ chọn tệp thay vì chọn thủ công và tôi thấy rằng nếu bạn viết không phải tệp .jpg/ .mp4nó sẽ hiển thị cảnh báo chỉ cho phép hình ảnh , thay vào đó, nếu bạn viết đường dẫn đến .jpgtệp, nó sẽ tải lên hình ảnh và nếu bạn viết một tệp cho .mp4nó sẽ đóng trình quản lý tệp và không làm gì cả, như thế nó sẽ bỏ qua việc bạn đang cố tải lên một cái gì đó.

Sinh sản

  • đi đến instagram
  • đăng nhập
  • bấm F12để mở công cụ dev
  • nhấp CTRL + SHIFT + Mđể chuyển đổi mô phỏng thiết bị
  • chọn bất kỳ thiết bị nào hoặc thay đổi kích thước trang để chuyển đổi chế độ xem trên thiết bị di động của trang web
  • tải lại trang web
  • cố gắng tải lên một cái gì đó bằng cách nhấp vào +nút dưới cùng .

(Video là 6mb (<15mb là tối đa) và 40 giây (<60 giây là tối đa)

Câu trả lời:


0

Tôi nghĩ rằng khách hàng api riêng trên Instagram sẽ làm việc tốt hơn so với cách tiếp cận của bạn


Tôi muốn làm việc trực tiếp với trình duyệt và không thực hiện với các mô-đun yêu cầu hoặc đôi khi như thế này bởi vì mỗi lần bạn đăng nhập từ api riêng, nó sẽ gửi một thư cho biết một quyền truy cập mới đã được thực hiện .. và điều đó hơi nhàm chán
Mat.C

Bạn có thể lưu trữ dữ liệu phiên, sử dụng lại và không nhận được email đã đăng nhập. Dưới đây là ví dụ github.com/dilame/instagram-private-api/blob/master/examples/
mẹo

Ngoài ra, cách tiếp cận hiện tại của bạn phụ thuộc vào các bộ chọn css có chứa băm và tôi chắc chắn 100% chúng sẽ thay đổi theo thời gian và bạn sẽ cảm thấy nhàm chán hơn khi cập nhật các bộ chọn này
lazyd3v

nó có thể tương tác với hai xác thực nhà máy quá không?
Mat.C


1

Nếu bạn muốn xuất bản video qua API, bạn phải thực hiện hai bước sau:

  • tạo một thùng chứa đối tượng phương tiện bằng cách sử dụng POST /{ig-user-id}/mediađiểm cuối
  • xuất bản container với POST /{ig-user-id}/media_publish

Yêu cầu ví dụ:

POST graph.facebook.com/89751400008469714/media
  ?media_type=VIDEO
  &video_url=https//www.example.com/videos/my-video.mov
  &caption=#myfirstvideo!

Hãy thử sử dụng tệp .mov . Nếu điều này không khắc phục được sự cố, bạn có thể kiểm tra xem video của mình có các đặc điểm sau không:

  • Tốc độ bit video 3.500 kbps
  • Định dạng H.264 / MP4
  • Thời lượng 3 đến 60 giây
  • chiều rộng tối đa 1080 pixel (1080P)
  • 29,96 khung hình mỗi giây
  • Bộ giải mã âm thanh AAC ở mức đơn âm 44,1 kHz

Yêu cầu ví dụ sẽ trả về ID (ví dụ 012345) của container. Sau đó, bạn sẽ phải xuất bản ID này với mẫu mã sau: POST graph.facebook.com/89751400008469714/media_publish? Creation_id = 012345
muellerra
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.