問題
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
で失敗することがあります
解決策
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])
これにより確実に別ウィンドウに制御を移すことができます