はじめに
Seleniumを使ってブラウザを操作する方法を解説します。
これを使うことで実際にブラウザを操作してのテストをするときに同じような操作を繰り返し手作業しなくても良くなったりして作業の効率化ができると思います。
準備
今回はpython3.10を用いて操作を行っていきます。
まずはSeleniumをインストールする必要があります。
下記のコマンドを実行してseleniumをインストールしましょう。
pip install selenium
また今回はGoogleChromeを操作していきますのでChromeDriverというソフトをインストールする必要があります。
https://chromedriver.chromium.org/downloads
こちらのサイトからお使いのGoogleChromeのバージョンに合ったChromeDriverをインストールしてください。
また、Edgeなど他のブラウザを操作したい場合は各ブラウザに対応したドライバが必要になりますので準備しておいてください。
手順
ここからは各操作について実際のコードを基に解説していきます。
ブラウザの立ち上げ
from selenium import webdriver
browser = webdriver.Chrome()
インストールしたseleniumをインポートしてChrome()
メソッドを呼び出しています。
これだけでGoogleChromeのブラウザを立ち上げることができます。
今回はbrowserという変数で戻り値を受け取っていますがこのインスタンスが立ち上がったブラウザと紐づいているので、このインスタンスからメソッドを呼び出すことで立ち上がったブラウザをコントロールすることができます。
ページを表示
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://google.com')
このようにget()
を使うことで特定のページにアクセスすることができます。
引数は表示したいページのURLを渡すだけです。
要素の取得
from selenium import webdriver
from selenium.webdriver.common.by import By
browser = webdriver.Chrome()
browser.get('https://google.com')
Google_logo = browser.find_element(by=By.XPATH, value="/html/body/div[1]/div[2]/div/img")
画面上の特定の要素を操作をするには要素を取得する必要があります。
ボタンをクリックするにはクリックしたいボタンを指定する必要があるわけです。
JavaScriptのdocument.getElementById()
のようなイメージですね。
seleniumではcommon.byをインポートしてfind_element()
を用いて要素を取得します。
要素の特定方法
上の例ではXPATHといってHTMLのDOM要素を上位からフルで指定しています。
XPATHはページの改修などで要素の並びが変更になったりすると使えなくなる可能性もあるので可能であれば他の方法で指定するのがおすすめです。
この他にもいくつかの指定方法があります。
# idで指定
browser.find_element(by=By.ID, value="")
# classで指定 ※find_element s にすることでリスト型複数取得可能
browser.find_elements(by=By.CLASS_NAME, value="")
# nameで取得
browser.find_element(by=By.NAME, value="")
他にもありますがこの辺りが使えれば大体問題ないでしょう。
ボタンのクリック
from selenium import webdriver
from selenium.webdriver.common.by import By
browser = webdriver.Chrome()
browser.get('https://google.com')
google_info_link = browser.find_element(by=By.XPATH, value="/html/body/div[1]/div[1]/a[1]")
google_info_link.click()
要素が取得できていればあとはclick()
を実行するだけです。
ここまでくれば簡単ですね。
文字の入力
from selenium import webdriver
from selenium.webdriver.common.by import By
browser = webdriver.Chrome()
browser.get('https://google.com')
Google_search = browser.find_element(by=By.XPATH, value="/html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div/div[2]/textarea")
Google_search.send_keys('Hellp world')
こちらもsend_keys()
を使って入力したい文字を渡すだけです。
セレクトボックスの指定
プルダウン形式要素を操作する場合少し特殊な操作が必要になります。
from selenium.webdriver.support.ui import Select
Select(driver.find_element(By.NAME, 'enquete')).select_by_value ("1")
support.uiを別途インポートしてセレクトボックスを取得し、select_by_value()
で選択したい項目のvalueを指定します。
JavaScriptの実行
driver.execute_script(f"window.open('https://google.com');")
execute_script()
を用いてJavaScriptのコードを実行することもできます。
こちらの例では新しいタブを開き指定のURLにアクセスしています。
大量の画面をテストしたいときなどにURLをためておくだけで一気に開けるのでよく使っています。
注意点
ボタンのクリックや文字の入力をする際にうまく動かない場合は要素の指定を間違えている可能性があります。
例えば文字を入力する場合はinputタグを指定する必要があるので間違えて親要素などを取得しないように注意してください。
まとめ
これでブラウザの操作方法は以上になります。
これらのコードを続けて書いていくことで新規入会機能や商品の登録画面など操作が長くなりがちな作業を自動的に完了することができます。
慣れてくると結構すぐに書けるようになって数回しか使わない場合でも意外と効率化につながったりするので試してみてください。
最後に
記事を読んでくださった方は、是非弊社開発課のXもフォローしてください。
毎日エンジニアに向けた情報発信を行っています。