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 electron
và Nodejs
.
để 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
/ .mp4
nó 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 .jpg
tệp, nó sẽ tải lên hình ảnh và nếu bạn viết một tệp cho .mp4
nó 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)