インスタ(Instagram)を投稿する時に、スマホから入力するのが面倒なので、
パソコンから投稿できないか考えた。
ユーザーエージェントの設定を変えることで、可能になる。
今回は、ブラウザにFirefoxを使った。
プラグインに、「User-Agent Switcher」を使い、Andoroid に設定。
画面がスマホバージョンに切り替わらない時は、ブラウザのリフレッシュボタンを押すとよい。
パソコンの中の画像を選択して、インスタ投稿することができた。
さらに、これを自動で投稿することができないか考えた。
Selenium と Python を使ってできた。
insta_upload.py
# coding:utf-8
import os
import sys
import time
import requests
from selenium import webdriver
def main():
opt = Options()
profile_dir = 'プロファイルを保存している場所'
os.makedirs(profile_dir, exist_ok=True)
opt.add_argument("-profile")
opt.add_argument(profile_dir)
opt.add_argument(
"--user-agent=Mozilla/5.0 (Linux; Android 4.2.2; SHL24 Build/S2040) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36")
driver = webdriver.Firefox(options=opt)
driver.get("https://www.instagram.com/【ユーザー名】/")
driver.refresh() #スマホ画面に切り替わらない時 用
driver.find_element_by_css_selector('div[data-testid="new-post-button"]').click()
os.system('/bin/sh 【パス】/insta_upload_app.sh') #画像選択ダイアログ
time.sleep(3)
ele = driver.find_element_by_css_selector('span[class*="createSpriteExpand"]')
driver.execute_script("arguments[0].click();", ele)
time.sleep(1)
eles = driver.find_elements_by_css_selector('button')
for ele in eles:
if "次へ" in ele.text:
ele.click()
break
driver.find_element_by_css_selector('textarea[aria-label*="キャプションを入力"]').send_keys("インスタのテキスト")
time.sleep(1)
eles = driver.find_elements_by_css_selector('button')
for ele in eles:
if "シェア" in ele.text:
ele.click()
break
main()
画像選択ダイアログには、Shell経由で、Apple Script を使用した。
insta_upload_app.sh
#!/bin/sh
osascript <<EOS
tell application "System Events"
key code 102 -- 英数キー
key code 44 -- スラッシュ
keystroke "【画像を保存の用のパス】/insta"
key code 76 -- エンター
key code 125 -- down
key code 76 -- エンター
end tell
return
EOS
パソコンからの自動投稿で、気をつけなければいけないことが1つある。
不正アクセスをしたとみなされて、一時的にアカウントがロックされることがある。
その場合、パスワードを変更しなければならなくなる。
Options で、ユーザーエージェントの設定をするといけると思うのだが・・・。