はじめに
今回の記事では、SeleniumとPowerShellを使用してWebブラウザを自動化する方法について、iframeの操作に焦点を当てて解説します。
iframeとは?
iframeは、HTMLの一部であり、一つのウェブページ内に別のウェブページを埋め込むための要素です。
iframeは一つのウェブページ内に別のウェブページを埋め込むHTML要素であるため、その中身は親ページとは独立しています。
そのため、特定の要素にアクセスする前に、適切なiframeにスイッチする必要があります。Seleniumでは、‘SwitchTo()’メソッドを使用します。
iframeの扱い方
PowerShellの場合
事前準備
今回は自動化するブラウザをChromeとして記載しています。
# パス設定
$seleniumWebDriverDllPath = "seleniumドライバの格納場所"
$chromeWebDriverDirPath = "CHROMEドライバの格納場所"
# Selenium WebDriver DLLを読み込み
Add-Type -Path $seleniumWebDriverDllPath
# ChromeOptionsオブジェクトの作成
$chromeOptions = New-Object OpenQA.Selenium.Chrome.ChromeOptions
# Chromeドライバの起動
# ChromeOptionsを引数として渡し、カスタム設定を反映
$driver = New-Object OpenQA.Selenium.Chrome.ChromeDriver($chromeWebDriverDirPath, $chromeOptions)
# 目的のURLを開く
$targetURL = "開きたいURL"
$driver.Url = $targetURL
iframeの操作
iframeの操作には、Seleniumの‘SwitchTo()’メソッドを使用します。これにより、ドライバのフォーカスが特定のiframeに移動します。例えば、iframeのidが’frame1’である場合、以下のように操作します。
$frame = $driver.FindElementById("frame1")
$driver.SwitchTo().Frame($frame)
または以下のようなコードでもSeleniumのドライバはiframe内の要素に対して操作を行うことができます。
#iframeを切り替えて変数frameに格納する
$frame = $driver.SwitchTo().Frame("frame1")
#以降の操作はframeを使用して操作を行う
$frame.FinedElement([OpenQA.Selenium.By]::id('hogehoge')).Click()
操作が終わったら、ドライバのフォーカスをメインのウェブページに戻すためには、以下のコマンドを使用します。
$driver.SwitchTo().DefaultContent()
Pythonの場合
Pythonの場合も補足として記載します。
事前準備
SeleniumとChromeDriverは事前にインストールしているものとします。
from selenium import webdriver
driver = webdriver.Chrome("/path/to/chromedriver")
driver.get("https://www.example.com")
iframeの操作
iframeの操作に移ります。
Pythonではswitch_to.frame()
メソッドを用います。
例えば、iframeのidが”frame1″である場合、以下のように操作します。
frame = driver.find_element_by_id("frame1")
driver.switch_to.frame(frame)
操作が終わったら、元のページに戻るためには以下のようにします。
driver.switch_to.default_content()