PR

Python seleniumを使ったインスタグラム自動投稿

python selenimuを勉強がてらに、インスタグラムで写真を自動投稿するプログラムを考えた。

ウェブ開発の人気オンラインコース

開発環境

OS Windows11 
chromedriver-binary 114.0.5735.16.0
selenium 4.1.0
GoogleChrome 116.0.5845.141

ブラウザはGoogole Chromeを使いWebスクレイピングを行う。SeleniumWebDriverを使ってブラウザ操作の自動化を行う際には、各ブラウザに対応するdriverを用意する必要があります。

いちいちブラウザのバージョンを指定するのがめんどくさいので、webdriver_managerを使います。

webdriver_managerのインストール

Microsoft Windows [Version 10.0.22000.2416]
(c) Microsoft Corporation. All rights reserved.

C:\XXXX\XXX>pip install webdriver_manager

使い方

webdriver_managerを使う場合は以下のような書き方になります。webdriver.Chromeのカッコの中に、service=ChromeService(ChromeDriverManager().install())と記載します。赤字が該当箇所になります。

import time
# WebDriverライブラリをインポート
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
# ChromeのWebDriverライブラリをインポート
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager


driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))

インスタ自動投稿プログラム

insta_auto_upload.py

import time
# WebDriverライブラリをインポート
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
# ChromeのWebDriverライブラリをインポート
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager

#ユーザ/パスワード
username = ""
password = ""
#写真のパス
media_path = ''

driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
driver.implicitly_wait(10) # ページ読み込み最大待ち時間
driver.get("https://www.instagram.com/")

#ウインドサイズの指定
driver.set_window_size(1050,700)

#ユーザ/パスワード
driver.find_element(By.NAME,"username").click()
driver.find_element(By.NAME,"username").send_keys(username)
driver.find_element(By.NAME,"password").click()
driver.find_element(By.NAME,"password").send_keys(password)
#ログインボタン
driver.find_element(By.CSS_SELECTOR,".\\_acap").click()

#ログイン情報の保存/後で選択
element=driver.find_element(By.CSS_SELECTOR,".\\_acap")
actions=ActionChains(driver)
actions.move_to_element(element).perform()
element=driver.find_element(By.CSS_SELECTOR,"body")
actions=ActionChains(driver)

#お知らせをオン/後で選択
actions.move_to_element(element).perform()
driver.find_element(By.CSS_SELECTOR,".xjqpnuy").click()
driver.find_element(By.CSS_SELECTOR,".\\_a9_1").click()

#新規投稿をクリック
driver.find_element(By.XPATH,'//*[@aria-label="新規投稿"]').click()
time.sleep(3)
#ファイル選択
upload_input = driver.find_element_by_xpath('//input[@type="file"]')
upload_input.send_keys(media_path)
time.sleep(3)

#次へを2回押す
for i in range(2): 
    driver.find_element(By.XPATH,'//*[@role="button" and contains(text(), "次へ")]').click()
    time.sleep(3)

#シェアボタン押下
driver.find_element(By.XPATH,'//*[@role="button" and contains(text(), "シェア")]').click()
time.sleep(5)

#投稿画面を閉じる
driver.find_element(By.XPATH,'//*[@aria-label="閉じる"]').click()
time.sleep(5)

# 画面を閉じる
driver.quit()

赤のマーカの箇所、ユーザ名(username )、パスワード(password )は独自のものを設定してください。

投稿したい写真は、media_path にフルパスで設定してください。

まとめ

ユーザとパスワードと投稿したい写真を設定すれば、そのまま使用できると思います。注意する点があるとすれば、pythonのライブラリの不足で実行時にエラーになるかもしれませんが、足りないライブラリをエラーメッセージから読み解いて、pip installを実行してください。

あと、プログラムにはところどころsleep相当の処理(time.sleep)をいれてますが、あまりに連続して投稿するとアカウントがロックされる可能性があるので気を付けてください。

↓ udemyならスクレイピングの基本から応用までが学べます。

開発の人気オンラインコース

コメント

タイトルとURLをコピーしました