【Python】Seleniumでiframeの内容を操作する

WebアプリケーションとExcelを自動的に操作してExcelのデータをWebアプリケーションに入力する
RPA関連の作業を仕事で行っています。

メインはUi PathというRPAツールを使用していますがWebアプリケーション内にiframeタグ
使用されている箇所については一筋縄ではいきません。

https://forum.uipath.com/t/iframe/35061/2

iframeが使用されている箇所はPythonからSeleniumを使用して操作を行ってみます。

PythonでSeleniumの導入

PythonでSeleniumを使用するにはpipコマンドを使用します。

1pip install selenium

適当なiframeタグを使用しているサイトが見つからなかったので自サイトのWordPressの管理画面を使用しました。

WordPressにJetpackというプラグインを追加すると管理画面の上部から自サイトのお知らせを確認できます。 https://jetpack.com/support/notifications/

こちらのお知らせ画面にiframeが使用されているのでPythonからSeleniumを使用して、お知らせ画面の内容を取得します。

WebDriverの導入

Seleniumでブラウザを操作するにはWebDriverと呼ばれる実行ファイルを事前にダウンロードしておく必要があります。
Chromeの場合はChromeDriver – WebDriver for Chromeからダウンロードできます。
https://sites.google.com/a/chromium.org/chromedriver/downloads

FireFoxの場合はgithubのgeckodriverからダウンロードします。
https://github.com/mozilla/geckodriver/releases

ダウンロードしたexeファイルは.pyファイルと同じパスに設置します。
今回はChromeのWebDriverを使用しました。

Seleniumでiframeの内容を取得する

PythonからSeleniumを動かしてiframeの内容を取得するコードは以下のようになります。

 1from selenium import webdriver
 2
 3driver = webdriver.Chrome()
 4driver.get('自分の管理サイトのURL')
 5
 6iframe = driver.find_element_by_id('wpnt-notes-iframe2')
 7driver.switch_to.frame(iframe)  # 取得したインラインフレームにスイッチ
 8
 9notification_element = driver.find_element_by_class_name('wpnc__notes')
10elements = notification_element.find_elements_by_class_name('wpnc__text-summary')
11
12for element in elements:
13    # 取得したお知らせに対して処理を行う

重要な箇所はswitch_to.frameでiframeタグに切り替えるところです。

seleniumのfind_elementを利用してiframeの要素を変数に格納後、switch_to.frameでiframe変数にフレームを切り替えています。

フレームを切り替えたあとは、seleniumのfind_elementを使用してiframe内の要素を取得して操作できます。

関連ページ