LoginSignup
14
19

More than 3 years have passed since last update.

【selenium】python初心者がインスタ自動いいねツールを勝手に改修した話

Last updated at Posted at 2019-04-14

経緯

一時期、某クラウドソーシングサイトの依頼で大流行りしていた「インスタ自動いいねツール」を試しに作りたいなーとググったところ、偉大なる先駆者様を発見。

pythonを私用でちゃんと使うのは初めてでしたが、記事がとてもわかりやすくコードまで書いてくださっているのですんなりできました。

そこで欲をかいた私は、もうちょっと自分用にカスタマイズしたいなーっと以下を実装してみます。

・現在表示されている分以上のループをしたい(次の読み込み分もいいねをつけたい)
・いいね済かどうかを判定したい

やること

・selectorやpathを修正
・指定した回数分いいねを押す
・既にいいねされていたり、読み込みきれていないものは「次へ」

※2020/01/20:パスとmax値を修正

コード

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

#Webdriver
browser = webdriver.Chrome(executable_path='[chromedriver.exeのパス]')

#URL
MAIN_URL = "https://www.instagram.com/"
TAG_SEARCH_URL = MAIN_URL + "explore/tags/{}/?hl=ja"

#selectors
LOGIN_PATH = '//*[@id="react-root"]/section/main/article/div[2]/div[2]/p/a'
LIKE_PATH = '//button[@class="wpO6b "]/*[name()="svg"][@aria-label="いいね!"]'
LIKE_BUTTON_PATH = '//button[@class="wpO6b "]'

MEDIA_SELECTOR = 'div._9AhH0' #表示されているメディアのwebelement
NEXT_PAGE_SELECTOR = 'a.coreSpriteRightPaginationArrow' #次へボタン

#USER INFO
username = "[username]"
password = "[password]"
#params
tagName = "[タグ名]"
likedCounter = 0
likedMax = 100

if __name__ == '__main__':

    #login 
    browser.get(MAIN_URL)
    time.sleep(3)
    browser.find_element_by_xpath(LOGIN_PATH).click()
    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)

    #tag search
    time.sleep(3)
    encodedTag = urllib.parse.quote(tagName) #普通にURLに日本語は入れられないので、エンコードする
    encodedURL = TAG_SEARCH_URL.format(encodedTag)
    print("encodedURL:{}".format(encodedURL))
    browser.get(encodedURL)

    #media click
    time.sleep(3)
    browser.implicitly_wait(10)
    browser.find_element_by_css_selector(MEDIA_SELECTOR).click()

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

        #次へ
        try:
            browser.find_element_by_css_selector(NEXT_PAGE_SELECTOR).click()
        except:
            break

    print("You liked {} media".format(likedCounter))

課題点

・全体的に高速化したい
 →あんまり早すぎると規制されるので悩みどころ
・既いいね時、次へ進むまでの時間が長い
・exceptでpassするのが個人的にいただけない。

14
19
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
19