【Python3】Seleniumでiframeの要素を取得して操作する方法
おはこんばんにちは、せなです。
今回はSeleniumでiframeの要素を取得して操作する方法を説明したいと思います。
コード
まずはコードを記載します。説明については後述します。
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
# chromeを使用
driver = webdriver.Chrome(ChromeDriverManager().install())
# ページを開く
driver.get('https://jqueryui.com/datepicker/')
try:
# iframeの要素が読み込まれるまで待機
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, 'demo-frame')))
except TimeoutException as e:
### 例外処理
print(e)
# iframeを取得
iframe = driver.find_element(By.CSS_SELECTOR, 'iframe.demo-frame')
# iframeの中の要素を操作するために切り替える
driver.switch_to.frame(iframe)
# 要素を取得する
element = driver.find_element_by_id('datepicker')
コードの説明
iframeは読み込まれるまでに時間がかかりますので、「expected_conditions」で待機処理を行う必要があります。(必須ではないですが、後方のiframe取得で要素を発見できずにエラーとなります。)
「(By.CLASS_NAME, 'demo-frame’)」としていますが、こちらを「(By.CSS_SELECTOR, 'iframe.demo-frame’)」とするとiframeが読み込まれる前に要素の取得が行われるため、エラーとなります。
「driver.find_element(By.CSS_SELECTOR, 'iframe.demo-frame’)」これはiframe内のdomを取得しています。
「driver.switch_to.frame(iframe)」コメントにも記載していますが、iframe内の要素を操作するために切り替えを行なっています。
ディスカッション
コメント一覧
まだ、コメントがありません