[Instagram] 自動でいいねをしてくれるシステム


概要

指定したハッシュタグを検索して、設定した回数分「いいね」を実行するシステム
既に「いいね」をしている場合は、パスをする
※いろいろなブログを参考にして実装しました

環境

  • Windows 10 Home
  • Windows Subsystem for Linux
  • Ubuntu 18.04.2 LTS
  • Python 3.6.7
  • Chromedriver 74.0.3729.6 (win32)
  • Selenium 3.141.0.dist-info

Google Chromeのインストール

環境とバージョンが一致しないと起動しないため、注意が必要

$ wget http://chromedriver.storage.googleapis.com/74.0.3729.6/chromedriver_win32.zip

Seleniumのインストール

$ pip3 install selenium

ソースコード


import sys
import os
sys.path.append('/usr/local/lib/python3.7/dist-packages')

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import urllib.parse
import time

#Webdriver
browser = webdriver.Chrome('/mnt/c/workspace/pydev/chromedriver.exe')

BASE_URL      = 'https://www.instagram.com/'
LOGIN_URL      = BASE_URL + 'accounts/login/?source=auth_switchwer'
TAG_SEARCH_URL = BASE_URL + 'explore/tags/{}/?hl=ja'

#selectors
NO_LIKE_FLAG = "//button/span[@class='glyphsSpriteHeart__outline__24__grey_9 u-__7']"

NOTICE_BUTTON = "//button[@class='aOOlW   HoLwm ']"
LIKE_BUTTON   = "//button[@class='dCJp8 afkep _0mzm-']"

MEDIA_SELECTOR      = 'div._9AhH0'
NEXT_PAGER_SELECTOR = 'a.coreSpriteRightPaginationArrow'

#USER INFO
username = 'Instagramのユーザ名'
password = 'Instagramのログインパスワード'

#params
tagName = '指定するハッシュタグ'
likedCounter = 0
likedMax = 100 # likeのMAX値

if __name__ == '__main__':

    # ログイン画面にアクセス
    browser.get(LOGIN_URL)
    time.sleep(3)

    # ログイン情報を入力してログイン
    usernameField = browser.find_element_by_name('username')
    usernameField.send_keys(username)
    passwordField = browser.find_element_by_name('password')
    passwordField.send_keys(password)
    passwordField.send_keys(Keys.RETURN)
    time.sleep(3)

    # 通知ボタンを押下
    browser.find_element_by_xpath(NOTICE_BUTTON).click()
    time.sleep(3)

    # 指定したハッシュタグを検索
    encodedTag = urllib.parse.quote(tagName)
    encodedURL = TAG_SEARCH_URL.format(encodedTag)
    print("encodedURL:{}".format(encodedURL))
    browser.get(encodedURL)
    time.sleep(3)

    # media click
    browser.implicitly_wait(15)
    browser.find_element_by_css_selector(MEDIA_SELECTOR).click()

    # 次へボタンが表示されないか、いいねがlikedMax分いくまでいいねし続ける
    while likedCounter < likedMax:
        time.sleep(15)
        try:
            browser.find_element_by_xpath(NO_LIKE_FLAG)
            browser.find_element_by_xpath(LIKE_BUTTON).click()
            likedCounter += 1
            print("liked {}".format(likedCounter))
        except:
            #読み込まれなかったり既にいいねしているならパス
            print("pass")
            pass

        # 次へ
        try:
            browser.find_element_by_css_selector(NEXT_PAGER_SELECTOR).click()
        except:
            break
        print("You liked {} media".format(likedCounter))

実行方法

$ python3 ファイル名.py