明示的に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 件のコメント:
コメントを投稿