2017-11-18

【Python】SeleniumでゴリゴリFacebook認証する

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)




注目の投稿

めちゃくちゃ久しぶりにこのブログ書いたw 更新3年ぶりw > 多様性というゲームは尊厳と自由を勝ち取るゲームなのかもしれないな。  もともとツイッターでツイートした内容なんだけど、ちょっと深ぼる。 ----- 自分は男 x 30代x 二児の父 x 経営者 x 都心(共働き世...