1週間でインスタフォロワー0人→700人になるプログラムが作れてしまった話 

#はじめに

不純な動機でPythonを使うシリーズ第2弾です。
前回（第一弾）の[記事](https://qiita.com/kei_kei_kei/items/730ba09e7830d5c00a1c)でもPythonに触れているのでまだ見れていない人はぜひ見てください。

今回は日本でも10代をはじめ世界中でとんでもないユーザー数を抱えるSNS。
インスタでフォロワーを増やしたかったという単純明快な願望を叶えるために取り組みました。

インスタが好きな人に

**「俺、フォロワーこのくらいいるぜ、」**

て言ったら黄色い声で

**「すごーい」**

とか言われそうじゃん。

てか言われたいじゃないですか。
でも、顔もイケテナイし、インスタ映えスポット回るのもめんどいし。。。。

またもや不純な動機でございます。
てことでめちゃくちゃ単純なプログラムですが、作りましたので紹介します。

作るのに要した時間は**3時間くらい**

seleniumも使ったことなかったですけど、すぐ作れたので簡単です。

#インスタでフォロワーを増やす条件とは？
有名人やそもそものポテンシャルが備わっているなら、顔やスタイルや元々の知名度で取ってこれるかもしれませんが。
僕のような条件が揃っていない人なら普通にやっても、まぁ無理でしょう。

そんな一般人がフォロワーを増やすにはいくつかのポイントがあると思ってます。
ここは本題のプログラムとはかけ離れますが、


**・分かりやすいプロフィール設計
・同属性ユーザーの投稿ハッシュダグを辿り、ライクする
・充実したコンテンツ
・同属性の相互フォローを促す**

一般人が増やしていくならこれくらいかなと思ってます。

**誰でも増やせると言う証拠も欲しかったので、自分だったら絶対にフォローしないだろうなと言うアカウントで実験しました。**

今回は相互フォローを促すことに特化していきます。


##アカウント設定と前提条件
誰でも増やせると言う条件と僕だったら絶対にフォローしないアカウントと言えば？

そうです！

**美人ではない顔なしの情報商材を売っていそうなアカウントです！！**

「自動販売」「権利収入」
など

僕が一番嫌いな属性です。

そんなアカウントを作り運用していきます。

##使用技術
Pythonのみです。
サーバーにはあげません。

エディタはVSです。

これのみーーーー

※もうちょっと時間ができたらFlutterとかで作ろうかなと思ってます。

##これが実際のアカウント
皆さんきになるであろう。実際のアカウントがこちら。

https://www.instagram.com/truthhack/

見事な出来栄えでしょう。ありがとうございます。
画像は適当に海外の金持ちが投稿している写真を引っ張ってきました。

今、見たらフォロワー少し外れてましたね。継続的にやるともうちょっと増えそうです。


#動かすための必要な準備
必要なものはこの記事を見ている人なら持っているであろう

**PCとエディタとインスタアカウントです。**

これだけです。

#準備できたら実際に書いていく
では実際に公開するので書いていきましょう！

##必要なモジュールを突っ込んでいく

下記のモジュールを使うので、インストールできていない人はpip install （モジュール名）を打っておけばなんとかなります笑



```python:filename.py
import time
from selenium import webdriver
import chromedriver_binary
from bs4 import BeautifulSoup
from selenium.webdriver.common.action_chains import ActionChains
```



##まずはログイン

WEB上でログインしないといけないので、ログインIDとパスワードを用意して入力させてアカウントにログインします。


```python:filename.py
Username = 'インスタのユーザーネーム'
password = 'インスタのパスワード'
#上記のIDとパスワードを変更すれば他のアカウントでも同様のことができるので他のアカウントのフォロワーも増やしたかったら上記を変更すればいいだけです。
```

下記のプログラムを打つと勝手にクロームが起動して、指定アカウントのログインまでやってくれます。
ここまでで、自分のアカウントに入れたらうまくいってます。

```python:filename.py
chrome_options = webdriver.ChromeOptions()
prefs = {"profile.default_content_setting_values.notifications" : 2}
chrome_options.add_experimental_option("prefs",prefs)
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.implicitly_wait(10) # seconds
# インスタのURL
driver.get("https://www.instagram.com/")

# ここにユーザーネームなどの必要情報を入れていく
el = driver.find_element_by_name("username")
el.send_keys(Username)
el1 = driver.find_element_by_name("password")
el1.send_keys(password)
el.submit()
```


##狙った場所に遷移させる

自分のアカウントに入れたら、次は自分のフォロワーの一覧まで移動します。
オススメのアカウントをクリックしてもいいのですが、オススメは新しくアカウント作成した人ばかりなので、ゾンビアカウントの可能性があるのでフォロワーまでいってフォロワーのフォロワーをフォローしていくためにフォロワー、一覧まで行きます。
**※ここはどこの場所まで遷移するかは任せます。**

```python:filename.py
try:
    annual_link = driver.find_element_by_xpath('//*[@id="react-root"]/section/nav/div[2]/div/div/div[3]/div/div[5]/a')
    annual_link.click()
except Exception:
    oter_link = driver.find_element_by_xpath('//*[@id="react-root"]/section/nav/div[2]/div/div/div[3]/div/div[4]/a')
    oter_link.click()
# 自分のフォロワーをクリックする
annual_link1 = driver.find_element_by_xpath('//*[@id="react-root"]/section/main/div/header/section/ul/li[3]/a')
annual_link1.click()
```



##フォローしまくる
あとはフォローしていきましょう！
途中でスクロールするのはスクロールしないと次のボタンが出てこないのでスクロールさせてます。
for文の数字を変えればもっとフォロー数増えるので適当に変えてください。


```python:filename.py
# フォロワーの先頭をクリック
annual_link2 = driver.find_element_by_xpath('/html/body/div[4]/div/div[2]/ul/div/li[1]/div/div[2]/div[1]/div/div/a')
annual_link2.click()
# フォロワーのフォロワーをクリック
annual_link3 = driver.find_element_by_xpath('//*[@id="react-root"]/section/main/div/header/section/ul/li[2]/a')
annual_link3.click()
# スクロールする
target = driver.find_element_by_xpath('/html/body/div[4]/div/div[2]/ul/div/li[12]')
actions = ActionChains(driver)
actions.move_to_element(target)
actions.perform()
for iyy in range(3,50):
    try:
        inside = '/html/body/div[4]/div/div[2]/ul/div/li['+ str(iyy) +']/div/div[2]/button'
        followButton = driver.find_element_by_xpath(inside)
        followButton.click()
        time.sleep(2)
    except NoSuchElementException as e:
        followButton1 = '/html/body/div[5]/div/div/div[3]/button[2]'
        target = driver.find_element_by_xpath(followButton1)
        driver.execute_script("arguments[0].click();", target)
    except Exception:
        continue
```


##フォローを外していく
アカウントにログインするまでは一緒です。
その後を書き換えても、別ファイルで作成してもいいです。
では、最後にフォローした人を外していきましょう。
これは期間を置いてから外した方がいいです。
相互フォローしたタイミングでうまく外れるように今後はしたいです。




```python:filename.py
try:
    accept_link = driver.find_element_by_xpath('//*[@id="react-root"]/section/main/div/div/div/div/button')
    accept_link.click()
except Exception:
    pass

try:
    annual_link = driver.find_element_by_xpath('//*[@id="react-root"]/section/nav/div[2]/div/div/div[3]/div/div[5]/a')
    annual_link.click()
except Exception:
    oter_link = driver.find_element_by_xpath('//*[@id="react-root"]/section/nav/div[2]/div/div/div[3]/div/div[4]/a')
    oter_link.click()

# 自分のフォロワーをクリックする
annual_link1 = driver.find_element_by_xpath('//*[@id="react-root"]/section/main/div/header/section/ul/li[3]/a')
annual_link1.click()

# スクロールする
target = driver.find_element_by_xpath('/html/body/div[4]/div/div[2]/ul/div/li[12]/div/div[3]/button')
actions = ActionChains(driver)
actions.move_to_element(target)
actions.perform()

for iyy in range(1,201):
    followPeople = '/html/body/div[4]/div/div[2]/ul/div/li[' + str(iyy) + ']/div/div[2]/button'
    annual = driver.find_element_by_xpath(followPeople)
    annual.click()
    time.sleep(2)
    unfollow = driver.find_element_by_xpath('/html/body/div[5]/div/div/div[3]/button[1]')
    unfollow.click()
    time.sleep(2)

print(Username + " " + 'Done!!')

# 最後にドライバーを終了する
driver.quit()
```



#これから
先に触れたように別のものも作っているので時間が確保できず、片手間です。
一緒にやりたい人はぜひ連絡ください。
もしくは別のPJに参加したい人も同様です。

他のPJはtoB向けの営業支援ツールを作ってます。
体制は僕含めて4名。

連絡は下記のFBにくれると嬉しいです。
https://www.facebook.com/kei.nakanowatari