Instagramに動画/画像をアップロードするプロセスを自動化しようとしています(プライベートAPIを使用せずに)。とりあえず、画像のアップロードを自動化し、ビデオに対して同じことをしようとしています。これをelectron
とでやっていNodejs
ます。
アップロードボタンをクリックして画像を選択するために、実際に問題なく動作するこのコードを実行します。
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);
}
このコードは画像に適しています.jpg
。私が直面している問題は、アップロード中に、何かを選択して投稿するためのファイルセレクターを開いたときに、動画が認識されないことです。私は可能なすべてのビデオ拡張機能を試しました。
また、ファイルセレクターでファイルパスを書き込もうとしたが、手動で選択したが、.jpg
/ 以外の.mp4
ファイルを書き込むと、警告が表示され、画像のみが許可されることがわかった。代わりに、.jpg
ファイルへのパスを書き込むと、画像がアップロードされるファイルを.mp4
そこに書き込んだ場合、ファイルマネージャーが閉じて何も行われません。何かをアップロードしようとしていることは無視されます。
再現する
- Instagramに行く
- ログインする
- クリック
F12
して開発ツールを開きます - クリック
CTRL + SHIFT + M
してデバイスエミュレーションを切り替えます - デバイスを選択するか、ページのサイズを変更して、サイトのモバイルビューを切り替えます
- サイトをリロードします
- 下の
+
ボタンをクリックして何かをアップロードしてみてください。
(ビデオは6mb(<15mbが最大)で、40秒(<60sが最大です)