概要
指定したハッシュタグを検索して、設定した回数分「いいね」を実行するシステム
既に「いいね」をしている場合は、パスをする
※いろいろなブログを参考にして実装しました
環境
- 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