LoginSignup
1
0

More than 1 year has passed since last update.

Seleniumで複数のウィンドウハンドルを扱うときに現れるout of indexエラーを回避する方法

Posted at

はじめに

seleniumでウィンドウ切り替え時に生じるエラーに対する対処

エラー内容

out of index
とか色々

エラー原因

.png
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) #対処後

まとめ

ウィンドウを開いた順番にハンドルを取得させるようにしてエラーを回避した.

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0