Estou tentando automatizar o processo de upload de vídeos / imagens no instagram (sem usar uma API privada). Por enquanto, automatizei o upload da imagem e estou tentando fazer o mesmo pelos vídeos. Eu estou fazendo isso com electron
e Nodejs
.
para clicar no botão de upload e selecionar uma imagem, eu executo esse código que realmente funciona bem.
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);
}
Esse código funciona bem para imagens .jpg
. O problema que estou enfrentando é que, durante o upload, quando ele abre o seletor de arquivos para escolher algo para publicar, ele não reconhece os vídeos . Eu tentei todas as extensões de vídeo possíveis.
Também tentei escrever o caminho do arquivo no seletor de arquivos, selecione-o manualmente e vi que, se você escrever um arquivo não .jpg
/, .mp4
ele mostra um aviso, apenas imagens são permitidas ; em vez disso, se você escrever o caminho para um .jpg
arquivo, ele carrega a imagem e se você escrever um arquivo para .mp4
ele, feche o gerenciador de arquivos e não faça nada, ignorando que você está tentando fazer o upload de algo.
Reproduzir
- vá para o instagram
- faça o login
- clique
F12
para abrir as ferramentas de desenvolvimento - clique
CTRL + SHIFT + M
para alternar a emulação de dispositivo - selecione qualquer dispositivo ou redimensione a página para alternar a visualização móvel do site
- recarregar o site
- tente fazer o upload de algo clicando no
+
botão inferior .
(O vídeo tem 6mb (<15mb é o máximo) e 40segundos (<60s é o máximo)
fonte
Se você deseja publicar um vídeo por meio da API, execute as duas etapas a seguir:
POST /{ig-user-id}/media
terminalPOST /{ig-user-id}/media_publish
Solicitação de exemplo:
Tente usar um arquivo .mov . Se isso não resolver o problema, você pode verificar se o seu vídeo tem as seguintes características:
fonte