2020-04-21

iframeの中に入る - selenium - python

<iframe> というタグの中の要素を取得するには、
明示的にiframeタグ内に移動する必要がある。

・<iframe>の確認

YAHOOのトップページの広告の要素を検証してみると、iframeタグ内にあることがわかる。


さらに、iframeの中には<html>、<head>、<body>というhtml構造が見える。

ただページを開いただけだと<iframe>内の<div>や<a>などの要素は取得できない。


・そのまま要素を取得してみる

試しにiframeを気にせず要素を取得してみる。
from selenium import webdriver


brows = webdriver.Chrome()

brows.get( 'https://www.yahoo.co.jp/' )
brows.maximize_window()

#ここがiframe内の要素
brows.find_element_by_xpath('//div[contains(@id,"_dummy_parent_")]').click()

#出力
# selenium.common.exceptions.NoSuchElementException

要素がない とエラーが出る。


・iframe内に移動する

iframe内に移動するにはあらかじめiframeタグの要素を取得しておいて
.switch_to_frame() に要素を渡して移動する。
from selenium import webdriver


brows = webdriver.Chrome()

brows.get( 'https://www.yahoo.co.jp/' )
brows.maximize_window()

#iframeの要素を取る
element = brows.find_element_by_xpath('//iframe[@title="Ad Content"]')

#iframe内へ移動
brows.switch_to_frame(element)

brows.find_element_by_xpath('//div[contains(@id,"_dummy_parent_")]').click()

今度はエラーが出ずに画面が切り替わる。

※iframeから抜けるときは .switch_to_default_content()

0 件のコメント:

コメントを投稿