Django Girls and Boys 備忘録

Python、Selenium、Django、java、iPhoneアプリ、Excelマクロなどで気付いたこと、覚えておきたいことなどを載せていきます。

【Python Selenium】新規ウインドウ追加時のウインドウ切替方法

 


PythonSeleniumを使用してWebサイトへのアクセスをする場合に必要になってくる機能の1つにウインドウの遷移(切替)があります。

 

Webサイト上でボタンなどをクリックした時に新規ウインドウが別タブ、別ウインドウとして開いた時は、自driverが操作できるウインドウハンドルを切替えてやらなければなりません。

 

# あるボタンbtn1をクリック(これにて新規ウインドウオープンの場合)
btn1.click
# ウィンドウハンドルを取得する
newhandles = driver.window_handles
# driverでの操作できるウインドウを切り替える
driver.switch_to.window(newhandles [1])

 

上の例では、まずはじめにbtn1をクリックしていますが、これにて新規ウインドウが開いたとします。

 

この場合に、操作できるウインドウをを切り替えるには、その次の行にあるように、

 newhandles = driver.window_handles

で新しく開いたウインドウも含めたウインドウハンドルを取得します。

 

ウインドウハンドルはdriver.window_handlesで取得できます。

driver.window_handlesはlist型配列として格納されています。

 

これにより取得したウインドウハンドルを利用して、その次の、

driver.switch_to.window(newhandles [1])

で、操作できるウインドウを切り替えています。

 

newhandles [0]は配列の0番目のハンドル、

newhandles [1]は配列の1番目のハンドル

を表し、新規ウインドウが開いた時に、あらかじめ何番目のウインドウかが分かっていれば、driver.switch_to.windowでそのハンドル番号を指定することで、ウインドウを切り替えることができます。

 

また、

 

# driverでの操作できるウインドウを切り替える
driver.switch_to.window(newhandles [-1])

 

とすることで、配列の最後のハンドルのウインドウに切り替えることが出来ます。

 

通常、新規ウインドウは配列の最後に追加されますのでこれで新規ウインドウに切り替えることが出来ます。

 

ただし、自分が見た限りでは、開くウインドウの数が多くなってくると必ずしも末尾に追加されるわけではないようです。

 

この場合の対処方法については、後日、追加で記事を書く予定です。

 

関連記事:

【PythonからWeb操作】seleniumのインストール手順 - Django Girls and Boys 備忘録

 

【PythonによるExcelファイルの読み書き】PythonのダウンロードからExcelファイルの読み書きまでの一通りすべての方法 - Django Girls and Boys 備忘録

 

【PythonでのExcelファイル読み書き方法】ファイルオープンしているファイル(アクティブファイル)への書込方法 - Django Girls and Boys 備忘録

 

【Python】キーボード、キー入力判定方法 - Django Girls and Boys 備忘録

 

【Python】keyboardライブラリでのキー入力検出に使用可能なキーの種類 - Django Girls and Boys 備忘録

 

【Python Selenium】Webサイトのスクレイピングなどで必要なフレーム間移動方法 - Django Girls and Boys 備忘録

 

【Python Selenium】ブラウザ用ドライバーのダウンロードとインストール - Django Girls and Boys 備忘録

 

【PythonからWeb操作】selenium、各ブラウザ用ドライバーの最新バージョン確認、ダウンロード場所 - Django Girls and Boys 備忘録

 

【Python Selenium】新規ウインドウ追加時のウインドウ切替方法 - Django Girls and Boys 備忘録

 

【Python Selenium】ウインドウ表示時などでのWaitの方法、待機方法 - Django Girls and Boys 備忘録

 

【Python Selenium】新規ウインドウ(新規タブ)追加時のウインドウ切替方法(追加ハンドルをハンドル差異比較にて取得) - Django Girls and Boys 備忘録

 

【python】実行時に表示されるコンソールウインドウを非表示にする方法 - Django Girls and Boys 備忘録