Ich versuche, den Prozess des Hochladens von Videos / Bildern auf Instagram zu automatisieren (ohne eine private API zu verwenden). Im Moment habe ich das Hochladen von Bildern automatisiert und ich versuche das Gleiche für die Videos zu tun. Ich mache das mit electron
und Nodejs
.
Um auf die Schaltfläche zum Hochladen zu klicken und ein Bild auszuwählen, führe ich diesen Code aus, der tatsächlich gut funktioniert.
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);
}
Dieser Code funktioniert gut für Bilder .jpg
. Das Problem, mit dem ich konfrontiert bin, ist, dass beim Hochladen beim Öffnen der Dateiauswahl für die Auswahl eines Beitrags die Videos nicht erkannt werden . Ich habe alle möglichen Videoerweiterungen ausprobiert.
Ich habe auch versucht, den Dateipfad in die Dateiauswahl zu schreiben, stattdessen ihn manuell auszuwählen, und ich habe gesehen, dass beim Schreiben einer Nicht- .jpg
/ .mp4
Datei eine Warnung angezeigt wird, dass nur Bilder zulässig sind. Wenn Sie den Pfad zu einer .jpg
Datei schreiben, wird das Bild hochgeladen und wenn Sie eine Datei darauf schreiben, .mp4
wird der Dateimanager geschlossen und nichts unternommen. Dadurch wird ignoriert, dass Sie versuchen, etwas hochzuladen.
Fortpflanzen
- Gehe zu Instagram
- Mach den Login
- Klicken Sie hier,
F12
um die Entwickler-Tools zu öffnen - Klicken Sie hier,
CTRL + SHIFT + M
um die Geräteemulation umzuschalten - Wählen Sie ein Gerät aus oder ändern Sie die Größe der Seite, um die mobile Ansicht der Site umzuschalten
- Laden Sie die Site neu
- Versuchen Sie, etwas hochzuladen, indem Sie auf die untere
+
Schaltfläche klicken .
(Das Video ist 6 MB (maximal <15 MB) und 40 Sekunden (maximal <60 Sekunden)