python、seleniumで東大ミスコン、ミスターコンに毎日自動投票する

###東大ミスコン、ミスターコンが始まりましたね!
![ミスコン、ミスターコン.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287296/ae390e0b-debd-fb91-e3f3-480dea7ebfef.jpeg)


私は東大ミスコンはNo.2 [上田彩瑛](https://misscolle.com/tokyo2019/profile/2)さんを、東大ミスターコンはNo.3 [赤尾将希](https://mrcolle.com/tokyo2019/profile/3)を応援しています!!!!!

応援するにあたって毎日投票しようと思ったのですが、、、、
####面倒臭いのです......
![泣き顔.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287296/e3f0df44-327d-9c6b-b4ee-390b7163925b.png)


毎日投票ページにいって投票ボタンをクリックするのはしんどすぎるのですよね......


####そこで、、、

#####じゃ、自動化しちまおう！！！！ってなりました。

**面倒臭いことはpythonにやらせよう**という有名な言葉もあるようですし、、、、(笑)













さて、このコードを使うにはいくつか**環境設定**が必要です。
1. **selenium** のインストール
2. **chromedriver**のダウンロード
3. ueda.py　（実行するファイル）（名前は任意）を作る
（↑ここまでで情報をとって来れるようになった）
4. macのデフォルトアプリ(**automator**)でmac内アプリを作る
5. 定期的にそのアプリを実行させるようにする

###1. seleniumのインストール
[ターミナル](https://techacademy.jp/magazine/5155)で
`pip install selenium
`
と入力して**Enterキー**を押して実行してください。


###2. chromedriverのダウンロード
まず**chromeのバージョン**を確認します。
chromeを開いた状態で左上のchromeをクリックして**Google chromeについて**を
クリックしてバージョンをみます。（74とか75とかって書いてあるはず）
次に、
https://sites.google.com/a/chromium.org/chromedriver/downloads
上のURLを開きます。すると下のような画面が出てきます。
<img width="731" alt="スクリーンショット 2019-07-09 23.56.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287296/ba6b27c5-a8e6-7706-b54a-9b32978655b1.png"<img width="252" alt="スクリーンショット 2019-07-09 14.04.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287296/7a41b865-3955-b0a4-99a0-02419b366b58.png">
>


上で確認したバージョン（74とか75とか）に対応するcheomeDriverをクリックするとzipファイルの一覧が出てくるので、mac64と書いてあるzipファイルをクリックしてダウンロードし解凍します。すると**chromedriver**が手に入ります。自分の好きなところに適当に置いてください。（3. でどうせ場所指定するのでどこでも良いです）


###3. ueda.py（実行するファイル）を作る（名前は任意）


以下のコードに必要な情報を書き込む+コメントアウトを外す作業をします。



```python:ueda.py
# -*- coding: utf-8 -*-
from selenium import webdriver

# ---------------------------
driver_path = '' #←ここにchromedriverのパスを書いてください。

# 以下でアカウント情報を書き込む
account_mail = ''  # ''の間にLineアカウントのメールアドレスを入力。
account_password = ''  # ''の間にLineアカウントのパスワードを入力。
# ----------------------------

#Missコンへの投票を自動化させたい方は以下の一文の頭から#を取り除いてください。
#top_url = 'https://misscolle.com/tokyo2019/vote'

#Mrコンへの投票を自動化させたい方は以下の一文の頭から#を取り除いてください。
#top_url = 'https://mrcolle.com/tokyo2019/vote'


#　Missコンの土居さんか、Mrコンの山口さんに投票したい方は以下の一文の頭から#を取り除いてください。
#Xpath='//*[@id="entries"]/div[1]/div[3]/a'

#　Missコンの上田さんか、Mrコンの赤羽さんに投票したい方は以下の一文の頭から#を取り除いてください。
#Xpath='//*[@id="entries"]/div[2]/div[3]/a'

#　Missコンのサーカーさんか、Mrコンの赤尾さんに投票したい方は以下の一文の頭から#を取り除いてください。
#Xpath='//*[@id="entries"]/div[3]/div[3]/a'

#　Missコンの上野さんか、Mrコンの鈴木さんに投票したい方は以下の一文の頭から#を取り除いてください。
#Xpath='//*[@id="entries"]/div[4]/div[3]/a'

#　Missコンの中澤さんか、Mrコンの木瀬さんに投票したい方は以下の一文の頭から#を取り除いてください。
#Xpath='//*[@id="entries"]/div[5]/div[3]/a'
driver = webdriver.Chrome(driver_path)
driver.get(top_url)
driver.find_element_by_xpath(Xpath).click()
mail = driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div[2]/div/form/fieldset/div[1]/input')
mail.send_keys(account_mail)
password = driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div[2]/div/form/fieldset/div[2]/input')
password.send_keys(account_password)
driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div[2]/div/form/fieldset/div[3]/button').click()
```

**例えばueda.pyなどというファイルを適当な場所につくり、そこに以上のスクリプトをコピペしてください。（場所は自分がわかるならどこでも良い）**
**そしてそのファイルを何らかのエディタで開き、コードをいじれるようにしてください。**
まず、
#####①chromedriverの絶対pathを書き込む。
ターミナルを開いて、chromedriverをターミナルの画面にドラッグするとpathが出てくる（[参考サイト](https://wayohoo.com/unix/how-to-get-the-full-path-of-a-file-or-folder-in-the-terminal-for-mac.html))ので上のスクリプトのdriver_path=’’の「’」と「’」の間にペーストしてください。
例：driver_path=’/Users/あなたのユーザー名/Downloads/chromedriver’

#####②自分のLineのアカウント情報を書き込む。
①と同様に上のスクリプトの
account_mail = ''のところにあなたのLineのメールアドレスを入力してください。
account_password = ''のところにあなたのLineのパスワードを入力してください。
#####③コメントアウトを外す。
ミスコンorミスターコンのどちらに投票したいのか、誰を応援したいのか、からスクリプトの中の指示にしたがってコメントアウトを外してください。
#####④　ueda.pyを保存する。
以上で投票できるようになりました。

ueda.pyがある階層に移動し、([参考になるサイト](https://qiita.com/kenju/items/77a2dc1b6a60697b1133))
`python ueda.py`

と打てばファイルを実行できます。実行すると勝手にプラウザで投票ページを開き、Lineにログインして投票してくれます。
（違う階層でも、パスでueda.pyの場所を指定すれば実行できます。）

### 4. macのデフォルトのAutomatorを用いてmac内アプリを作る

#####①まずAutomatorというアプリ（デフォルトで入っています）を開く。
**Lauchpad**（ロケットのアイコン）→**その他**→**Automator**をクリック→右下に出てくる**Automator**のアイコン（ロボット）をクリック



少し待つと以下のような画面が出てくる。
<img width="538" alt="スクリーンショット 2019-07-10 0.22.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287296/814f7767-0911-91e8-fef6-a61599bb6766.png">


#####②次に**アプリケーション**（ロボットのアイコン）をダブルクリック

#####③左上の検索窓にシェルと打つと「シェルスクリプトを実行」が検索結果して出てくるので、それを右にドラッグする。（下の2枚の写真）（[参考になるサイト](https://book.mynavi.jp/macfan/detail_summary/id=42064)）
<img width="244" alt="スクリーンショット 2019-07-10 0.24.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287296/d2903239-cfe9-079c-dd55-3f41f23ecad1.png">

<img width="1194" alt="スクリーンショット 2019-07-10 0.24.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287296/2d75d56a-90b4-ba19-f5ac-3a5dc53af0c4.png">

#####④次にpythonのpathを確認する。

ターミナルで
`which python`

と打って実行すると、どこにあるpythonを使っているのか？がわかるので、それをコピーする。
例：/anaconda3/bin/python

（ただpython ~~で実行すると、人によってはpythonが複数パソコンに入っており、seleniumを使うときにうまく行かなくなることがあるからこの作業を行った）

#####⑤automatorにコマンドを入力する。
`④で調べたpythonの絶対パス ueda.pyの絶対パス`

とシェルに入力してください。

（以下は例）
<img width="950" alt="スクリーンショット 2019-07-10 0.31.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287296/28a8e6cb-1674-3128-72ab-a011e7480965.png">

ueda.pyの絶対パスは　**3. の①**でchromedriverの絶対パスを調べた時と同じようにして調べてください、([参考になるサイト](https://qiita.com/kenju/items/77a2dc1b6a60697b1133))

右上の「実行」ボタンを押してエラーが出なければOKです。

#####⑥そしたら、「ueda.pyを実行するという行為」をアプリ化します。

command +s　か　左上のファイル→保存で　適当に名前をつけて保存します。

（デスクトップに置いておくと楽かもしれないです）

デスクトップに保存すると下のようにアプリ化されてデスクトップに表示される。（ueda.appと保存した場合↓）

<img width="113" alt="スクリーンショット 2019-07-10 0.43.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287296/5db92f1f-277d-9dda-b480-0a3ae21d7951.png">

このアプリをダブルクリックすると、スクリプトが実行されて投票してくれます。


### 5. 定期的にそのアプリを実行させるようにする
([参考になるサイト（こっち読んだ方がわかりやすいかも笑）](http://gijutsubu.backstage.jp/?eid=87))

①デフォルトのカレンダーアプリを開きます

<img width="52" alt="スクリーンショット 2019-07-10 0.48.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287296/8ae17a30-ae74-f197-048f-89e227805292.png">

②左上のファイル→新規カレンダーと進み、適当に名前をつけて新しくカレンダーを作ります。
③新しく作ったカレンダーを選択してから、投票を始めたい日にちをダブルクリックして新規イベントを作成します。
<img width="166" alt="スクリーンショット 2019-07-10 0.50.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287296/a06863f7-0512-f430-ba92-f7407a3abede.png">

設定は、
通知→カスタムに移動し
サウンドつきメッセージをファイルを開くに変更。
カレンダーをその他に変更し、さっき作ったアプリ(〜〜.app)を選択する。
〜分前を「イベントの開始時間」に変更
時間を投票したい時間に設定します。
繰り返しを「毎日」に設定。
（もしも1日にn回実行したいなら、n個のイベントを作れば良いです。でも投票は1日一回までだから一回で良いです）

（カレンダーにイベントが毎日表示されて鬱陶しいならカレンダーからイベントの表示を消すには ②で作ったカレンダーからチェックを外せば良いです。)

④システム環境設定→通知→おやすみモードに移動して「ディスプレイがスリープ中は入にする」のチェックを外す。つまりスリープ中におやすみモードになるのを防ぎます。

####以上でアプリを定期的に実行できるようになりました。

**cronでも定期実行は設定できますが、こっちのやり方の方が簡単な気がしたのでこちらを紹介いたしました。**
[参考サイト](https://qiita.com/shunyooo/items/69c3523a8c500b37f33f)

![嬉しい.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287296/9945a76c-34b8-0533-b2c3-77f0bdff5aad.png)