今日の記事では、Pythonを使ってFacebookに自動ログインしてみます。
これはPythonのSelenium Webドライバを使ったWebブラウザの自動化を垣間見ることができる楽しい実験になるでしょう。
Prerequisites
さて、このチュートリアルを進める前に、Pythonに特定のライブラリをインストールする必要があります。
これらのライブラリによって、ブラウザへのログインがとても簡単になります。
ここではPythonのSelenium webdriverモジュールを使用します。
このモジュールは、ドライバプログラムを使ってWebブラウザ(Chrome / Firefox)を制御することができます。
しかし、ブラウザと一緒にSeleniumを使用するには、そのブラウザ(Chrome/Firefox)用のドライバをインストールする必要があります。
それらをインストールするために、別のPythonモジュールの助けを借りることにします。
selenium webdriverを手動でダウンロードする代わりに、このモジュールをインポートするだけです。
このモジュールをインポートするだけで、すべての要件を自動的に取得することができます。
それでは、pip マネージャーを使って、必要なパッケージを pip install
してみましょう。
pip install selenium pip install webdriver_manager |
必要なパッケージのインストールが完了したら、コードを書き始めましょう。
この記事もチェック:PythoのSeleniumを使用して要素を取得する色々な方法を解説する
Facebookへのログインを自動化するスクリプトを作成する
まず、必要なモジュールをインポートしましょう。
webdriver_managerと同様に
selenium` も必要です。
from selenium import webdriver
from webdriver_manager.firefox import GeckoDriverManager
from webdriver_manager.chrome import ChromeDriverManager
import time
|
ここでは、Selenium のコアモジュールである webdriver
クラスが必要です。
また、firefox/chromeで使用するので、必要なWebDriversをロードする必要があります。
さて、今回は以下のURLでログインします。
LOGIN_URL = 'https://www.facebook.com/login.php'
|
さて、ログイン機能をクラスとして実装します。
クラス名は FacebookLogin
とします。
init()` を呼び出すと、selenium webdriver のセッションが初期化されます。
email と password の両フィールドを webdriver セッションに送る必要があるので、入力として受け取ります。
最後に、Webdriver から GET リクエストで LOGIN_URL
を取得します。
class FacebookLogin():
def __init__( self , email, password, browser = 'Chrome' ):
# Store credentials for login
self .email = email
self .password = password
if browser = = 'Chrome' :
# Use chrome
self .driver = webdriver.Chrome(executable_path = ChromeDriverManager().install())
elif browser = = 'Firefox' :
# Set it to Firefox
self .driver = webdriver.Firefox(executable_path = GeckoDriverManager().install())
self .driver.get(LOGIN_URL)
time.sleep( 1 ) # Wait for some time to load
|
さて、これでクラスのインスタンスが初期化されました。
さて、ログインするために、login()
という別のメソッドを作り、ログインを行うことにします。
ログインするためには、ログイン要素(htmlページでは email
と pass
)に入力を与える必要があります。
Seleniumには find_element_by_id()
メソッドがあり、対応する要素を自動的に見つけてくれます。
キーボード入力を送信するには、 element.send_keys(input)
を直接使用することができます!
def login( self ):
email_element = self .driver.find_element_by_id( 'email' )
email_element.send_keys( self .email) # Give keyboard input
password_element = self .driver.find_element_by_id( 'pass' )
password_element.send_keys( self .password) # Give password as input too
login_button = self .driver.find_element_by_id( 'loginbutton' )
login_button.click() # Send mouse click
time.sleep( 2 ) # Wait for 2 seconds for the page to show up
|
APIがいかにシンプルであるかに注目してください。
最後に、time.sleep()
を使って、プログラムがウェブページを読み込むのに時間をかけます。
以下に完全なコードをお見せします。
main` モジュールの中で、適切なログイン情報を使用することを確認してください。
from selenium import webdriver
from webdriver_manager.firefox import GeckoDriverManager
from webdriver_manager.chrome import ChromeDriverManager
import time
LOGIN_URL = 'https://www.facebook.com/login.php'
class FacebookLogin():
def __init__( self , email, password, browser = 'Chrome' ):
# Store credentials for login
self .email = email
self .password = password
if browser = = 'Chrome' :
# Use chrome
self .driver = webdriver.Chrome(executable_path = ChromeDriverManager().install())
elif browser = = 'Firefox' :
# Set it to Firefox
self .driver = webdriver.Firefox(executable_path = GeckoDriverManager().install())
self .driver.get(LOGIN_URL)
time.sleep( 1 ) # Wait for some time to load
def login( self ):
email_element = self .driver.find_element_by_id( 'email' )
email_element.send_keys( self .email) # Give keyboard input
password_element = self .driver.find_element_by_id( 'pass' )
password_element.send_keys( self .password) # Give password as input too
login_button = self .driver.find_element_by_id( 'loginbutton' )
login_button.click() # Send mouse click
time.sleep( 2 ) # Wait for 2 seconds for the page to show up
if __name__ = = '__main__' :
# Enter your login credentials here
fb_login = FacebookLogin(email = 'sample@example.com' , password = 'PASSWORD' , browser = 'Firefox' )
fb_login.login()
|
うまくいけば、ブラウザにあなたのホームページが表示されるはずです。
これで、facebookへのログインは成功です。
まとめ
今回は、PythonとSeleniumを使って、Facebookへのログインを素早く自動化する方法について学びました