在没有API的情况下将图像上传到Windows上的Instagram [英] Upload an image to Instagram on Windows without API
本文介绍了在没有API的情况下将图像上传到Windows上的Instagram的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是一次知识共享,灵感来自:Posting (Uploading) an image to Instagram using Selenium not using an API
大多数来自互联网的答案只有Python版本,所以我在这里发布node.js中的JavaScript版本
推荐答案
此解决方案只能在Windows操作系统下运行。
下面的代码从Upload文件夹读取.jpg
格式的照片,并逐个发布带有标题的照片。
- 从以下地址下载Autoit模块:
- 使用以下依赖项更新
package.json
:
"dependencies": {
"selenium-webdriver": "^4.0.0-beta.4",
"autoit": "file:autoit-2.0.1.tgz"
},
运行
npm install
运行实际代码:
const fs = require('fs');
const { Builder, By, Key } = require('selenium-webdriver');
const au = require('autoit');
const chrome = require('selenium-webdriver/chrome');
const instagramUrl = 'https://www.instagram.com/';
const account = 'YOUR_INSTAGRAM_ACCOUNT';
const password = 'YOUR_INSTAGRAM_PASSWORD';
const instagramLoginUrl = instagramUrl + 'accounts/login/';
const instagramAccountUrl = instagramUrl + account;
const waitTime = 2000;
const uploadFolder = 'uploadFolderName'
const mobileDeviceName = 'iPhone X';
const loginAlert = '//*[@id="slfErrorAlert"]';
const newPostButton = '//div[@data-testid="new-post-button"]';
const nextButton = '//button[text()="Next"]';
const captionTextArea = '//textarea[@aria-label="Write a caption…"]';
const shareButton = '//button[text()="Share"]';
let readFileNames = () => {
let filenames = [];
fs.readdirSync(uploadFolder).forEach(file => {
let filename = file.split('.');
if (filename[1] == 'jpg') {
filenames.push(file);
}
})
return filenames;
}
let filenames = readFileNames();
(async function example() {
let driver = await new Builder()
.forBrowser('chrome')
.setChromeOptions(new chrome.Options()
.setMobileEmulation({ deviceName: mobileDeviceName }))
.build();
try {
// Go to Login page
await driver.get(instagramLoginUrl);
await driver.sleep(waitTime);
// Login
await driver.findElement(By.name('username')).sendKeys(account);
await driver.findElement(By.name('password')).sendKeys(password, Key.RETURN);
await driver.sleep(waitTime);
// Redirect to Profile Home Page
await driver.get(instagramAccountUrl);
await driver.sleep(waitTime);
//Read Local Photos
for (let file of filenames) {
//Create New Post
await driver.findElement(By.xpath(newPostButton)).click();
await driver.sleep(waitTime);
let imagePath = `${__dirname}\${uploadFolder}\${file}`;
console.log(imagePath);
// Handle Windows Upload Photo Dialog
let handle = "[TITLE:Open]";
au.Init();
au.WinWait(handle);
au.Send(imagePath);
au.ControlClick(handle, "", "Button1");
await driver.sleep(waitTime);
// Hit Next
await driver.findElement(By.xpath(nextButton)).click();
await driver.sleep(waitTime);
// Fill The Captions
await driver.findElement(By.xpath(captionTextArea)).sendKeys("Your caption");
await driver.sleep(waitTime);
// Share New Post
await driver.findElement(By.xpath(shareButton)).click();
await driver.sleep(waitTime);
// Back To Home Page
await driver.get(instagramAccountUrl);
}
}
catch (err) {
console.error(err);
}
finally {
await driver.quit();
}
})();
这篇关于在没有API的情况下将图像上传到Windows上的Instagram的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文