javascript - Instagram 从电脑上传视频
问题描述
我正在尝试自动化在 Instagram 上上传视频/图像的过程(不使用私有 API)。现在我自动上传图片,我正在尝试为视频做同样的事情。我正在用electron
and做这个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 为最大值)
解决方案
如果您想通过 API 发布视频,您必须执行以下两个步骤:
- 使用
POST /{ig-user-id}/media
端点创建媒体对象容器 - 发布容器
POST /{ig-user-id}/media_publish
示例请求:
POST graph.facebook.com/89751400008469714/media
?media_type=VIDEO
&video_url=https//www.example.com/videos/my-video.mov
&caption=#myfirstvideo!
尝试使用.mov文件。如果这不能解决问题,您可以检查您的视频是否具有以下特征:
- 3,500 kbps 视频比特率
- H.264 编解码器/MP4 格式
- 持续时间 3 到 60 秒
- 最大宽度 1080 像素 (1080P)
- 每秒 29.96 帧
- 44.1 kHz 单声道 AAC 音频编解码器
推荐阅读
- android - 如何在 Android Studio 中编译一个 github 项目?
- reactjs - How to style react bootstrap carousel with next js?
- sql - I want to reduce my SQL Query on big Query
- asp.net - Asp.Net Core 模块化应用
- oracle - 列出所有数据库表 - JPA
- c# - C#+Selenium 网页抓取
- jmeter - How to display the variable value in the summary report
- nginx - 增加 proxy_send_timeout 和 proxy_read_timeout 入口 nginx
- swagger - Add the placeholder required in swagger ui v2.0
- spring - @Value 注释不适用于 STS 3.9.6 上的 Infinitest 5.2.0