初めに
私はなぜか、初めのころ、Qiitaでフォロバは絶対にする!
とか思ってたらしく、今、フォローを477回もしているのですね。
数としてはまったく大したことないですが、毎回、フォローしてくださった人フォロバして…
っていうのははっきり言ってもう面倒くさくなってきてしまった。(だったらやるなよ)でもやり返さないのはやだもん!
というわけで、今回はPythonでQiitaでのフォロバ機能を作成します。
What you need
・・・英語っていいね。頭良く感じれるのは私だけかな?
- Python
- Selenium(use in Python)
- developer tool
何をしたいの?
- Qiitaにログインする
- 私をフォローしてくれている人の一覧ページへ行く
- 私がその人をフォローしていなかったらフォローする
コードを書いて!
って誰かに頼むのもいいかもだけど、自分でモノが作れるから楽しいんですよね。
今回、大きなところは「ログイン」ですね。
Cookieを使用します。
今回は、ログイン機能の部分のみ解説します。
他のコードは普通のスクレイピングと似たり寄ったりなので(・_・)
§ ログイン機能
def login(secure_token, session_key):
global driber
driber.add_cookie({
"name" : "secure_token",
"value" : secure_token,
"Domain" : ".qiita.com",
"Expires" : "Fri, 11 Mar 2044 21:35:06 GMT",
"HttpOnly" : "true",
"Secure" : "true"
})
driber.add_cookie({
"name" : "user_session_key",
"value" : session_key,
"Domain" : ".qiita.com",
"Expires" : "Tue, 11 Mar 2025 21:51:15 GMT",
"HttpOnly" : "true",
"Secure" : "false"
})
seleniumでのcookieの扱い方は、こちら取説を参照してみてください。
上記の関数は、
login(
secure_token="<your secure_token>",
session_key="<your session_key>"
)
というふうにして呼び出します。
さて、問題の引数ですが、これはブラウザのデベロッパーツールで確認できます。
今回はFirefoxでのやり方のみ解説させていただきます。
この際、事前にQiitaにはログインしといてください。
CONTROL + SHIFT + I のショートカットキーでデベロッパーツールを開けます。
のようになるので、上部のヘッダーから、「ストレージ」を選択し、左のバーからCookieを選択、そして、[ https://qiita.com ] を選択します。
な感じになります。
上のイメージに表示されているCookieの内、secure_tokenとuser_session_keyをログイン時に必要とします。
ので、この二つの値(イメージでは赤く塗りつぶしてある部分です)をそれぞれ、先ほどのログイン関数の引数として使います。
以上。ログインについてでした。
§ スクレイピング&フォロバ(というか、全てのコード)
コメントにて、さりげない解説をいたします。
from selenium import webdriver
from selenium.webdriver.common.by import By
import time as timer
qiitaLink = "https://qiita.com/"
driber = webdriver.Firefox()
driber.get(qiitaLink) # qiitaのホームページへ
timer.sleep(5.0)
def login(secure_token, session_key):
global driber
driber.add_cookie({
"name" : "secure_token",
"value" : secure_token,
"Domain" : ".qiita.com",
"Expires" : "Fri, 11 Mar 2044 21:35:06 GMT",
"HttpOnly" : "true",
"Secure" : "true"
})
driber.add_cookie({
"name" : "user_session_key",
"value" : session_key,
"Domain" : ".qiita.com",
"Expires" : "Tue, 11 Mar 2025 21:51:15 GMT",
"HttpOnly" : "true",
"Secure" : "false"
})
def followback():
global driber
# フォロワー一覧ページへ
page = "https://qiita.com/chi1180/followers?page="
driber.get(page + "1")
timer.sleep(6.0)
# ポップアップが表示され、要素の重なりによってボタンが押せずエラーになるため、そやつを消す
popup_btn = driber.find_element(By.CLASS_NAME, "coins-close-button")
if popup_btn: popup_btn.click()
timer.sleep(2.0)
# ページ数を取得
page_count = int(driber.find_element(By.CLASS_NAME, "style-1l61mdd").find_element(By.TAG_NAME, "span").text.split(" / ")[1])
# ページごとにチェック、フォロバ
for i in range(page_count):
page_num = i + 1
driber.get(page + str(page_num))
timer.sleep(5.0)
# フォローボタンを取得
followers = driber.find_elements(By.CLASS_NAME, "style-1fojn88")
# フォローする
for follower in followers:
follower.click()
# 連続でフォローすると、時たまフォローに失敗しましたと言わるるので、間隔を開ける
timer.sleep(0.5)
# 関数呼び出し
login(secure_token=my_sequre_token, session_key=my_session_key)
followback()
driber.quit()
## わぁ~~~
## コード書いてる際に気づいたのですが、[driber]は[driver]ですね。たぶん。
## 直すのはめんどくさい!べつにいいだろぉ?
最後に
はい、以上がQiitaの自動フォロバ機能です。
Windowsであれば、タスクマネージャーで定期実行させたりとか、してみてもいいかもしれませんね~
で、このプログラムですが、ちょっと嫌だな~というのが、前回スクレイピングしたページもスクレイピングするってところなんですよね。
まぁ、Pythonはファイルの読み込み、書き出しも簡単に記述できるので、やる気になったら実装してみましょうか。今はもうめんどくさくなってきましたがな。
以上です。
最後までよんでくれてありがとお!