#はじめに
seleniumでウィンドウ切り替え時に生じるエラーに対する対処
#エラー内容
out of index
とか色々
#エラー原因
seleniumで新しいウィンドウを開いたときのフロー
ウィンドウを開いた順にハンドルを取得できればよいが, たまにランダムな順番にハンドルを取得する.
同様の報告が以下にされています.
PythonでSelenium_ウィンドウの切替え失敗とその対処について - アウトプットして苦悩する
#対処
新しくウィンドウを開いたとき, window_handlesでウィンドウ情報をこれまでのウィンドウ情報リストに結合させ, 重複を消すようにしている. そうすると, ウィンドウを開いた順番にハンドルを取得できる. ウィンドウを閉じた際は連動してハンドルを消す必要があるのでご注意を.
from selenium import webdriver
#対処後追加した関数
def controlled_handles(controlled_handles):
all_handles = driver.window_handles
controlled_handles.append(all_handles)
controlled_handles = sorted(set(controlled_handles),
key=controlled_handles.index)
return controlled_handles
driver = webdriver.Ie(r"/path/to/IEDriverServer")
driver.get('http://www.something.com')
handles = driver.window_handles #対処後追加
#対処前
#all_handles = driver.window_handles
#driver.switch_to.window(all_handles[1])
#対処後
handles = controlled_handles(handles)
driver.switch_to.window(handles[1])
・
・
・
driver.quit()
controlled_handles.pop(-1) #対処後
#まとめ
ウィンドウを開いた順番にハンドルを取得させるようにしてエラーを回避した.