在没有API的情况下将图像上传到Windows上的Instagram [英] Upload an image to Instagram on Windows without API

查看:29
本文介绍了在没有API的情况下将图像上传到Windows上的Instagram的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是一次知识共享,灵感来自:Posting (Uploading) an image to Instagram using Selenium not using an API

大多数来自互联网的答案只有Python版本,所以我在这里发布node.js中的JavaScript版本

推荐答案

此解决方案只能在Windows操作系统下运行。

下面的代码从Upload文件夹读取.jpg格式的照片,并逐个发布带有标题的照片。

  1. 从以下地址下载Autoit模块:

https://github.com/xhawk18/node-autoit/issues/15

  1. 使用以下依赖项更新package.json
"dependencies": {
    "selenium-webdriver": "^4.0.0-beta.4",
    "autoit": "file:autoit-2.0.1.tgz"   
},
  1. 运行npm install

  2. 运行实际代码:

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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆