Estoy tratando de automatizar el proceso de carga de videos / imágenes en instagram (sin usar una API privada). Por ahora automaticé la carga de imágenes y estoy tratando de hacer lo mismo para los videos. Estoy haciendo esto con electron
y Nodejs
.
para hacer clic en el botón de carga y seleccionar una imagen ejecuto este código que realmente funciona bien.
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);
}
Este código funciona bien para imágenes .jpg
. El problema al que me enfrento es que durante la carga, cuando abre el selector de archivos para elegir algo para publicar , no reconoce los videos . Intenté todas las extensiones de video posibles.
También traté de escribir la ruta del archivo en el selector de archivos, en su lugar, selecciónelo manualmente y vi que si escribe un archivo .jpg
/ .mp4
no, muestra una advertencia, solo se permiten imágenes , en cambio, si escribe la ruta en un .jpg
archivo, carga la imagen y si le escribe un archivo .mp4
, cierra el administrador de archivos y no hace nada, de esta manera ignora que está intentando cargar algo.
Reproducir
- ir a instagram
- hacer el inicio de sesión
- haga clic
F12
para abrir las herramientas de desarrollo - haga clic
CTRL + SHIFT + M
para alternar la emulación del dispositivo - seleccione cualquier dispositivo o cambie el tamaño de la página para alternar la vista móvil del sitio
- recargar el sitio
- intenta subir algo haciendo clic en el
+
botón inferior .
(El video es de 6mb (<15mb que es el máximo) y 40 segundos (<60s que es el máximo)
fuente
Si desea publicar un video a través de la API, debe realizar los siguientes dos pasos:
POST /{ig-user-id}/media
punto finalPOST /{ig-user-id}/media_publish
Solicitud de ejemplo:
Intenta usar un archivo .mov . Si esto no soluciona el problema, puede verificar si su video tiene las siguientes características:
fuente