前回はログインからハッシュタグ検索をして、最新投稿をいいねするまでを実現しました。
ここから自動いいねロボットを実現するために大まかな流れを考えたいと思います。

アプリケーションを作成するときは簡単でもいいので流れを明確にしておきましょう。

流れにそって一つ一つ実装していけばいいんですね!

結構すでに第一回で実装済みだネ!
loginメソッドで実装済み
tagsearchメソッドで実装済み
pushniceメソッドで1回いいねする機能は実装済み
for文で繰り返し
今回はSTEP1~3の一部はすでに実装済みなので、STEP3の指定回数実行から実装していきましょう。
Instagram自動いいねロボット

STEP3のいいね指定回数をどのように設定しましょうか?

えーーっと、、10回とかでいい気がします!

うん!それくらいでもいいかもしれませんね。
けれど固定で持っているよりも引数もらった回数繰り返すようにしたほうが使い勝手がいいですよ。
後々ひとつのハッシュタグにつき何回いいねするかを自由に決めれるようにpushniceメソッドには引数でいいね回数を指定しましょう。
STEP3 最新投稿から順にいいねを指定回数実行
前回までのおさらいとしては、STEP1ログイン機能、STEP2ハッシュタグ検索機能、STEP3いいね(1回)機能まで実装しています。
ここに次は連続でいいねできるようにしましょう。
def pushnice(nice_num, driver): # いいねの回数を引数で指定
# 最新の投稿が見える位置まで移動
target = driver.find_elements_by_class_name('_9AhH0')[10]
actions = ActionChains(driver)
actions.move_to_element(target)
actions.perform()
time.sleep(1)
# 最新の投稿の1枚目をクリックしていいねを実行
driver.find_elements_by_class_name('_9AhH0')[9].click()
time.sleep(1)
driver.find_element_by_class_name('fr66n').click()
time.sleep(1)
# 指定回数繰り返し
for nn in range(nice_num-1):
# 次の投稿へ移動
driver.find_element_by_class_name('coreSpriteRightPaginationArrow').click()
time.sleep(1)
# いいねを押す
driver.find_element_by_class_name('fr66n').click()
time.sleep(1)
if __name__ == '__main__':
# 検索するハッシュタグを指定する。
taglist = ['camera']
# いいねの回数
nice_num = 10
# Chrome Driverを起動
driver = webdriver.Chrome('./chromedriver')
time.sleep(1)
# ログイン
login(username, password, driver)
# ハッシュタグで検索
tagsearch(taglist[0], driver)
# いいね
pushnice(driver)
mainメソッドからみていきましょう。
タグリストに加えて、いいねを何回するかを変数nice_numとして持ちます。
ログイン〜ハッシュタグで検索までは前回と同じです。
前回はpushniceメソッドでいいねを実施する回数は1回のみでしたが、今回はnice_num回実施するように、
pushniceに引数としてnice_numを渡してあげられるようにしました。
それではpushniceメソッドに入っていきましょう。
1回いいねをするところまではすでに実装していました。
16行目から引数でもらったnice_num分繰り返す処理にします。
ただし、先に最新の投稿でいいねを一回しているため -1しています。
処理としては、次の投稿へ移動する矢印を押して、そのあといいねを押すのを繰り返すようにfor文で実装しています。
ハッシュタグを順番に切り替え

次はハッシュタグの切り替えを実装してみましょう。

何をいれるか迷うなぁ〜
これまではハッシュタグのリストtaglistに一つしか設定していませんでしたが、ハッシュタグを複数設定して切り替えていいねをしていけるようにします。
if __name__ == '__main__':
# 検索するハッシュタグを指定する。
taglist = ['camera', 'wine', 'beautiful']
# いいねの回数
nice_num = 3
# Chrome Driverを起動
driver = webdriver.Chrome('./chromedriver')
time.sleep(1)
# ログイン
login(username, password, driver)
# ハッシュタグリストに入っているタグをすべて切り替える
for tag in taglist:
# ハッシュタグで検索
tagsearch(tag, driver)
# いいね
pushnice(nice_num, driver)
今回は少ない変更です。
3行目のtaglistに切り替えるハッシュタグをリストに追記します。
15行目からtaglistの中身をfor文で回して残りはこれまでの処理と同じです。

ひとつひとつ実装して、実行して動作確認していきましょう!

あれ!これで上のSTEP1~4完成なんじゃないですか?すごい!
ここまで実装できたら、ハッシュタグの中身を自由に変えて、いいね回数を好きな数設定すると一旦自動いいねロボットとしては機能します。
いいねをする時間帯を制限しよう
実は気をつけなければならない点として、Instagramではいいねをしすぎると機能制限されることがあります。
具体的には1日のうちにいいね回数500~900回すると制限がかかる可能性があるらしいです。
いいねから次のいいねまでの間隔も40秒開けないといけないとかなんとかです。。
40秒は長い気がしますが、回数に関しては普通にインスタをつかっている限りは超えなさそうな回数設定ですね。

ボクたちの使い方は普通の使い方じゃないから回数には気をつけないとですね!
最悪の場合はアカウントが凍結されてしまうリスクもあるので、少しでも人がつかっているように見せかけるようにしましょう。
そのためにインスタを使っている時間帯といいねの回数やいいねの間隔を調整しましょう。
時間帯:7時〜22時
いいねの回数:900回
いいねの間隔:40秒
import datetime
def time_comp(now, s_hour, e_hour):
# いいね可能時間かどうかを判定する
if now.hour > s_hour and now.hour <e_hour:
return 1
else:
return 0
def nice(interval, driver): # いいね実行
time.sleep(random.randint(int(interval*0.9),int(interval*1.1)))
driver.find_element_by_class_name('fr66n').click()
time.sleep(1)
def pushnice(nice_num, interval, driver): # いいねの回数といいねの間隔を引数で指定
# 最新の投稿が見える位置まで移動
target = driver.find_elements_by_class_name('_9AhH0')[10]
actions = ActionChains(driver)
actions.move_to_element(target)
actions.perform()
time.sleep(1)
# 最新の投稿の1枚目をクリックしていいねを実行
driver.find_elements_by_class_name('_9AhH0')[9].click()
time.sleep(1)
nice(interval, driver)
# 指定回数繰り返し
for nn in range(nice_num-1):
# ループ中のエラー対策
MAX_RETRY = 10 # エラーリトライ上限
for retry_n in range(MAX_RETRY): # エラー発生時MAX_RETRY回リトライする
try:
# 次の投稿へ移動
driver.find_element_by_class_name('coreSpriteRightPaginationArrow').click()
time.sleep(1)
# いいねを押す
nice(interval, driver)
# エラー時にはリトライ
except:
print("Error! retry={retry_n}/{MAX_RETRY}".format(retry_n, MAX_RETRY))
time.sleep(5)
# エラーなし
else:
break
if __name__ == '__main__':
# いいねの動きに対するパラメータ
s_hour = 8 # いいね可能開始時間[時]
e_hour = 19 # いいね可能終了時間[時]
nice_max = 900 # いいね最大回数[回]
interval = 40 # いいねの間隔[秒]
flag_max = 0 # いいねが最大回数されているかのフラグ
# 検索するハッシュタグを指定する。
taglist = ['camera', 'wine', 'beautiful']
# いいねの回数(いいね最大回数をタグ数に平等に分ける)
nice_num = int(nice_max / len(taglist))
# Chrome Driverを起動
driver = webdriver.Chrome('./chromedriver')
time.sleep(1)
# ログイン
login(username, password, driver))
# 現在の時刻を取得
now = datetime.datetime.now()
# いいねループ処理
while 1:
# いいね可能時間ならば自動いいね実行
if time_comp(now, s_hour, e_hour) == 1:
# ハッシュタグを切り替えながらいいねを押す動作を繰り返す
for tag in taglist:
# ハッシュタグで検索
tagsearch(tag, driver)
# いいね
pushnice(nice_num, interval, driver)
print("いいね完了!")
break
# いいね可能時間外ならば何もしない
else:
print("時間外です。")
time.sleep(1800)
まずは1行目のように現在時刻を取得するためにdatetimeをimportしておきましょう。
今回も50行目のmainから流れを見ていきましょう。
51~56行目までに先程決めたいいねの時間帯などを設定しています。
その後ログインするまではこれまでと同様です。
72行目でdatetimeを使って現在の時間を取得します。
75行目からは時間判定をするループ処理です。
77行目の時間判定のtime_compは3行目に実装しています。
ちなみに15行目のpushniceメソッドをこれまでのコードから少し変更しています。
ループ処理でハッシュタグ切り替えやいいねを実行していましたが、途中でエラーが発生するとそこでプログラムが止まってしまうため、エラーが発生してもリトライする処理を加えています。
よくわからないなと言う方はコピペで構いません。
pushniceメソッド内でいいねをする動きが2回でていたのでそれを10行目からのniceメソッドにしています。
CUIでの実装完了

これでターミナル上で実行できるCUIとしての実装は完了です。

ターミナルはなんだか苦手だからアプリにしてほしい!
毎回ターミナルを開いて実行したり、ハッシュタグやいいねの回数をコードを書き換えないと行けないのは不便なので、次回はこれをGUIアプリケーションにしようと思います。
ぜひ第3回もお付き合いください!
それでは。
コメント