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