前回、新しいタブを開くことを覚えました。 以前ブラウザの自動化でiMacrosを使っていたときは、たくさんのタブを開いて一気に処理をするロジックでコードを書いていました。 その発想のままPythonに移行したら、あれっ?新しいタブを開くのはど ... 続きを見る
Python+Seleniumで新しいタブを開くには?
次は、その開いたタブで処理したい場合、どうやって切り替えるか?です。
Python+Seleniumでタブを切り替えるには?
「window_handles」でタブ情報を取得し、「switch_to.window()」でタブへ飛びます。
いずれも「ChromeDriver」に対してのメソッドです。
window_handles[0]が現在開いているタブの情報で、新しく開くごとに配列に追加されていきます。
from selenium import webdriver
driver = webdriver.Chrome(【chromedriver.exeのパス】)
# URLを指定して、新しいタブを開く
driver.execute_script("window.open('https://〇〇');")
# 開いたタブに移動する
driver.switch_to.window(driver.window_handles[1])
タブが3つ以上になると上手く切り替えられない!?
私の環境では、タブが3つ以上になると切り替えが上手くいかないことがありました。
try - exceptで対処する方法があるそうです。
タブの数に関わらず、一番右のタブに切り替えるには?
window_handles[]の引数を「-1」にすると、一番右に開かれているタブに切り替えられます。
# 一番右のタブに移動する
driver.switch_to.window(driver.window_handles[-1])
まとめ
Python+Seleniumでタブの切り替えをするには、「window_handles」と「switch_to.window()」を組み合わせて使います。
iMacrosの時は「TAB T=〇」と数字で指定するだけでエラー無く切り替えられたので、ちょっと面倒に感じてしまいますね。
そもそも、複数のタブを扱うロジックにしなければ良いだけの話、とも言えるので、頭を切り替えようと思います。