1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?