FacebookにSeleniumで無理やりログイン
Facebook認証を行っているWebアプリでWebスクレイピングを行おうとした時のメモ。
Facebookにログインしないと、データがとれないので、なんとかFacebookアプリにログインする方法を考えた。
普通はAPIになんらかのPOSTリクエストをして認証するのが大半だが、Selenium一発芸しか使えないので、無理やりブラウザ操作でFacebookにログインしてみた。
ソースコード
#1 Facebookにログインするメソッド
Facebookのメールアドレスとパスワードを引数をとって、Facebookにログインする。
def facebookLogin(email, password):
#1-1 Facebookログインが求められる、Webページにアクセスする
引数にFacebookアプリログイン画面のURLを入れるbrowser.get("ログインしたいFacebookアプリのURL")
#1-2 フォームにE-mailとパスワードを入れる
.find_element_by_css_selectorで、引数に入力したいフォームのIDを指定する。
send_keysの引数には、もともと入れていたemailアドレスが入力される。同様にパスワードも。
#1-2 値の入力 browser.find_element_by_css_selector("#email").send_keys(email) browser.find_element_by_css_selector("#pass").send_keys(password)
#1-3 パスワードの確認画面を閉じる
パスワードを入力すると、確認画面が送信ボタンの上に出てしまうので、関係ないほかのの部分をクリックすることによって消す。
#1-3 どこでもいいので、クリックしないと送信ボタンが押せないため、適当に押している browser.find_element_by_xpath('//*[@id="email_container"]/div/label').click() time.sleep(2)
#2 ログインメソッドを実行
#1で作成したメソッドを利用して、ログインする
facebookLogin(email, password)
全体のコード
facebookLogin.py
import os
from selenium import webdriver
import pandas
import time
browser = webdriver.Chrome(executable_path='/mnt/c/workspace/pydev/chromedriver.exe')
email = "FACEBOOKのメールアドレス"
password = "FACEBOOKのパスワード"
#1
def facebookLogin(email, password):
#1-1 最初にPairsのFacebook認証を済ませる
time.sleep(2)
browser.get("ログインしたいFacebookアプリのURL")
#1-2 値の入力
browser.find_element_by_css_selector("#email").send_keys(email)
browser.find_element_by_css_selector("#pass").send_keys(password)
#1-3 どこでもいいので、クリックしないと送信ボタンが押せないため、適当に押している
browser.find_element_by_xpath('//*[@id="email_container"]/div/label').click()
time.sleep(2)
browser.find_element_by_xpath('//*[@id="u_0_0"]').click()
time.sleep(4)
#2
if __name__ == '__main__':
facebookLogin(email, password)