Python
Selenium

Selenium で別ウィンドウが開くまで待つ

More than 1 year has passed since last update.


問題

Selenium で Web ページを操作しています。あるリンクをクリックすると別ウィンドウが開き、そのウィンドウに制御を移したいです。

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://www.tagindex.com/html_tag/link/a_target.html')
driver.find_element_by_css_selector('[href="target_example.html"]').click()

driver.switch_to.window(driver.window_handles[1])

ただしこのコードでは driver.window_handles[1] が存在せずに IndexError で失敗することがあります :sob:


解決策

WebDriverWait.until() を使うことで、別ウィンドウが開くまで待機することができます。

from selenium import webdriver

from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Chrome()
driver.get('http://www.tagindex.com/html_tag/link/a_target.html')
driver.find_element_by_css_selector('[href="target_example.html"]').click()

WebDriverWait(driver, 3).until(lambda d: len(d.window_handles) > 1)
driver.switch_to.window(driver.window_handles[1])

これにより確実に別ウィンドウに制御を移すことができます :blush: