SANANEBLOG
python PR

【Selenium】iframeを扱うPowerShell・Pythonによるブラウザ自動化

記事内に商品プロモーションを含む場合があります

はじめに

今回の記事では、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()