今回はSeleniumを使用した際にウェブサイトのログインした状態にする方法を説明したいと思います。
Chromeプロファイルの取得
まず前準備としてプロファイル情報が必要になります、具体的にはchromeを起動してブラウザ上部のURL入力欄に「chrome://version」を入力して開いてください。
すると以下のような画面が表示されますので、プロフィールパスに表示されているパスのうち~~User Dataまでをコピーしてください。
インスタグラムのログイン情報を保存するサンプルコード
先ほど取得したプロフィールパスの情報はSeleniumでWebdriverを起動するときに引数の「options.add_argument()」に記載します。
具体的には–user-data-dirにはプロフィールパスの~~User Dataまで指定します。そして–profile-directoryには適当なユーザー名を指定します。(今回は適当に「login_test」としています。
from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.options import Options options = Options() profile_path = '自分PCのユーザー情報が保存されているパス~~User Data' account_name = 'login_test' #新規アカウント options.add_argument('--user-data-dir=' + profile_path) options.add_argument(f'--profile-directory={account_name}')
そして以下がインスタグラムにログインしログイン状態を保存するサンプルコードです
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By #from selenium.common.exceptions import TimeoutException from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.support import expected_conditions as EC import traceback import time # プロファイルデータのPATHとユーザー名を指定 profile_path = r"C:\~~~~Google\Chrome\User Data" print('ユーザー情報の場所:', profile_path) account_name = 'login_test' # ドライバ設定 options = Options() options.add_argument('--lang=ja') options.add_argument('--no-sandbox') options.add_argument('--user-data-dir=' + profile_path) options.add_argument(f'--profile-directory={account_name}') # ドライバー定義 driver = webdriver.Chrome(ChromeDriverManager().install(), options=options) # ウィンドウサイズ固定(フレキシブルなタグ構成でエラーになると面倒なので) driver.set_window_size(1200,1000) login_url = 'https://www.instagram.com/accounts/login/' user_id = "xxxuser_namexxx" #自分のユーザ名 pass_="xxxpassxxx" #パスワード # ログイン処理 try: driver.get(login_url) WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.NAME, "username"))) # ユーザーネーム入力欄にユーザーネームを入力 driver.find_element(By.NAME, 'username').send_keys(user_id) # パスワード入力欄にパスワード入力 driver.find_element(By.NAME, 'password').send_keys(pass_) # ログインボタンのXPATHをクリックする driver.find_element(By.XPATH, '/html/body/div[2]/div/div/div/div[1]/div/div/div/div[1]/section/main/div/div/div[1]/div[2]/form/div/div[3]/button').click() time.sleep(10) try: # 情報を保存する ボタンのXPATH driver.find_element(By.XPATH, '/html/body/div[2]/div/div/div/div[1]/div/div/div/div[1]/div[1]/div[2]/section/main/div/div/div/section/div/button').click() time.sleep(10) # 通知を受け取るかで「後で」ボタンのXPATH driver.find_element(By.XPATH, '/html/body/div[2]/div/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div/div[3]/button[2]').click() time.sleep(10) print('ログイン成功') except: pass except: print(driver.current_url) # ログインページからホーム画面に遷移している場合は既にログインしている状態とみなす if driver.current_url=='https://www.instagram.com/': print('ログイン状態です') else: traceback.print_exc() print('ログイン失敗') driver.close() driver.quit()
具体的には一度目の処理でログイン処理を行い、その際のログイン情報を保存します。するともう一度コードを実行するとログイン画面にアクセスした際にユーザー情報が保存されているためユーザー画面にリダイレクトすることが確認できます。
コメント
[…] 関連記事:【Python】Seleniumでサイトのログイン情報を保存する方法 […]
[…] 関連記事:【Python】Seleniumでサイトのログイン情報を保存する方法 […]
[…] 関連記事:【Python】Seleniumでサイトのログイン情報を保存する方法 […]
[…] 関連記事:【Python】Seleniumでサイトのログイン情報を保存する方法 […]