こんにちは、fuyutsuki(@Fuyutsuki)です。
Webの操作を自動化したいと思ったことはありませんか?
今回はそんな方に向けて、Google ChormeでSeleniumを使ってWeb操作を自動化する方法について解説します。WebDriverの具体的なコードも記載しております。
Chromeのバージョンを確認する
Seleniumで使うWebDriverのwebdriver-managerはGoogle Chromeを使用します。まずは、Google Chromeのバージョンを確認しましょう。
Chromeの右上の・・・から設定をクリックします。
Chromeについてをクリックします。
Chromeのバージョンを確認します。
必要なライブラリのインストール
pythonの環境構築はこちらの記事の通り、virtualenvを使います。
こちらのように、pip install webdriver-managerとpip install seleniumを追記しましょう。
@echo off
rem スクリプトが置かれている場所をカレントディレクトリにする。
cd /d %~dp0
rem 念のためvirtualenvのインストールとpipのアップグレードを行う。
pip install virtualenv
python -m pip install --upgrade pip
rem venvの環境を構築する。
python -m venv venv
call ./venv/Scripts/activate
python -m pip install --upgrade pip
rem 各パッケージをインストール
pip install webdriver-manager
pip install selenium
pause
ライブラリのインポートはこちらのように行います。
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager # ChromeDriverManagerをインポート
Seleniumを使ったプログラム例
私のプログラム例をこちらに記載します。
こちらはnoteに自動でログインするためのコードの一例になります。
def note_login():
# Chromeオプションを設定
chrome_options = Options()
chrome_options.add_argument("--headless") # ヘッドレスモードを有効化
chrome_options.add_argument("--window-size=1920,1080") # ウィンドウサイズを指定
chrome_options.add_argument("log-level=3")
# WebDriverのセットアップ
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()), options=chrome_options)
# noteのログイン画面にアクセス
driver.get("https://note.com/login")
# 明示的な待ち時間を設定
wait = WebDriverWait(driver, 10)
driver.get_screenshot_as_file(screenshot_filepath('login'))
time.sleep(1)
# ログインが必要かどうかを確認
try:
time.sleep(1)
username_field = wait.until(EC.presence_of_element_located((By.ID, "email")), message="ログインフォームが見つかりません。")
password_field = driver.find_element(By.ID, "password")
time.sleep(2)
username_field.send_keys(note_username)
time.sleep(2)
password_field.send_keys(note_password)
time.sleep(2)
# ログインボタンをクリック
login_button = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[contains(., 'ログイン')]")))
login_button.click()
time.sleep(2)
# ここで自分のページに移動します。
driver.get("https://note.com/investfuyutsuki")
time.sleep(1)
driver.get_screenshot_as_file(screenshot_filepath('mypage'))
# ページが読み込まれるのを待つ
wait = WebDriverWait(driver, 10)
except Exception as e:
print(e) # ログインが既に完了しているか、他の理由でログインフォームが表示されない場合のメッセージ
log_message('ログインが既に完了しているか、他の理由でログインフォームが表示されない場合')
return driver
ヘッドレスモードで実行する方法
今まではブラウザで画面を表示させていましたが、画面を表示させずにブラウザを起動し、プログラムだけを実行させるヘッドレスモードもあります。
画面を表示しないので途中の経過を画面では確認できなくなりますが、その分速く実行できるというのがメリットです。
コードとしてはこちらの箇所が該当します。
chrome_options.add_argument("--headless") # ヘッドレスモードを有効化
まとめ:Google ChromeでSeleniumを使ってみよう!
今回の記事はGoogle ChromeでSeleniumを使う方法について解説しました。
具体的なコードも記載しているので、ぜひご参考ください。