seleniumを使用してWeb情報取得、操作を行っている場合に必要となることの1つにフレーム間移動があります。
Webサイトがフレーム構造となっており、親フレーム、子フレームなどの階層構造になっている場合があります。
そのような場合に該当する要素の情報取得や操作を行う場合には、その要素が存在しているフレームまで移動してから取得、操作を行う必要があります。
フレーム間移動の例を以下に記載しておきます。
目次
1.事前準備
フレーム移動を行う場合のやり方としては、あらかじめ、
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome import service as fs
import os : : : path_driver = os.getcwd()+'\msedgedriver.exe' # ドライバー指定でEdgeブラウザを開く edge_service = fs.Service(executable_path=path_driver) driver = webdriver.Edge(service=edge_service)
などと、必要なもののインポートとドライバ指定をやっておきます。
上記、2,3行目のインポート文は、以下の「子フレームへの移動(指定時間待機)」
の場合に必要となるものです。
例としては、Edgeのドライバー指定の例を載せています。
4行目のインポート文を記載したうえで、os.getcwd()にて、カレントディレクトリ指定をしています。
カレントディレクトリにmsedgedriver.exeが入っているとした場合のedgedriver指定になります。
カレントディレクトリ取得に関しては、参考になるかわかりませんが以下の過去記事に簡単な例を載せています。
【Python カレントディレクトリ取得】Excelファイル指定を使った簡単な例記載 - Django Girls and Boys 備忘録
2.子フレームへの移動
driver.switch_to.frame(driver.find_element(By.NAME,"frame_a"))
フレーム移動として上記のように記載することで、現在の位置から「frame_a」という名前の子フレームへ移動することができます。
3.子フレームへの移動(指定時間待機)
#指定したdriverに対して最大で10秒間待つように設定する wait = WebDriverWait(driver, 10)
#指定されたフレームが利用出来るまで待機する wait.until(EC.frame_to_be_available_and_switch_to_it((By.NAME, "frame_a")))
また、フレーム移動の場合には移動指定をしてもフレーム間移動に時間がかかる場合があります。
フレームを移動しきらないうちに要素取得など次の操作を行おうとすると、そのような要素はないというようなエラーが発生します。
そのような場合には、上記2行のように記載することで、子フレームへ移動する場合に最大で指定した秒数待つことが出来ます(上記の場合は10秒)。
4.親フレームへの移動
#親フレームに戻る driver.switch_to.parent_frame()
子フレームへ移動した後などに元の親フレームへ移動したい場合には、上記のように記載することで今いる位置から親フレームへ移動することが出来ます。
また、PythonにてSeleniumを活用してスクレイピング、RPA化などを行っていく場合に必要となりそうな内容の記事を一覧として以下にまとめましたのでよかったらご参照ください。
関連記事:
【selenium 備忘録】ボタンクリックで複数の新規ウインドウを開いた時新規ウインドウをアクティブにできなかった場合の対処方法例 - Django Girls and Boys 備忘録
【python】実行ファイル(EXEファイル)作成手順 - Django Girls and Boys 備忘録
【Python カレントディレクトリ取得】Excelファイル指定を使った簡単な例記載 - Django Girls and Boys 備忘録
【Pythonでopenpyxlを使用したExcelファイルの読み書き方法】xlsmファイル(マクロありファイル)の場合 - Django Girls and Boys 備忘録
【PythonでのExcelファイル読み書き方法】ファイルオープンしているファイル(アクティブファイル)への書込方法 - Django Girls and Boys 備忘録
【Python Selenium】Webサイトのスクレイピングなどで必要なフレーム間移動方法 - Django Girls and Boys 備忘録
【PythonからWeb操作】selenium、各ブラウザ用ドライバーの最新バージョン確認、ダウンロード場所 - Django Girls and Boys 備忘録
【Python Selenium】ブラウザ用ドライバーのダウンロードとインストール - Django Girls and Boys 備忘録
【Python Selenium】ブラウザ用ドライバーのインストール、設定とWebサイトへのアクセス方法 - Django Girls and Boys 備忘録