明示的にタブの切り替えをする必要がある。
・(準備)タブを2つ開く
YAHOOのトップページを開いてから、新しいタブで天気・災害ページを開く。.execute_script() は文字列で指定されたjavascriptを実行する関数。
詳細はまた別の機会に。
from selenium import webdriver brows = webdriver.Chrome() brows.get( 'https://www.yahoo.co.jp/' ) brows.maximize_window() brows.execute_script('window.open(arguments[0], "newtab")', 'https://weather.yahoo.co.jp/weather/?day=1')
・ウィンドウハンドルを取得する
ブラウザのタブにはそれぞれウィンドウハンドルというIDが付いている。.window_handles でウィンドウハンドルをリストとして取得できる。
from selenium import webdriver brows = webdriver.Chrome() brows.get( 'https://www.yahoo.co.jp/' ) brows.maximize_window() #タブが1つの時 print( brows.window_handles ) brows.execute_script('window.open(arguments[0], "newtab")', 'https://weather.yahoo.co.jp/weather/?day=1') #タブが2つの時 print( brows.window_handles ) #出力 # ['CDwindow-61046F250634B3E0138D514BE870E2F1'] # ['CDwindow-61046F250634B3E0138D514BE870E2F1', 'CDwindow-F7B2FE085F63BD4904E523C068017BD0']新しいタブでページを開いた後にウィンドウハンドルが増えているのがわかる。
.current_window_handle で現在のウィンドウハンドルを取得できる。
from selenium import webdriver brows = webdriver.Chrome() brows.get( 'https://www.yahoo.co.jp/' ) brows.maximize_window() brows.execute_script('window.open(arguments[0], "newtab")', 'https://weather.yahoo.co.jp/weather/?day=1') print( brows.window_handles ) print( brows.current_window_handle ) #出力 # ['CDwindow-052BDF2E9B55B0220E2B8ACC2C0AF793', 'CDwindow-F284652E30DF3E0F9A377712CD504B70'] # CDwindow-052BDF2E9B55B0220E2B8ACC2C0AF793
・タブを切り替える
まずはタブを切り替えずに天気・災害ページの要素をクリックしようとしてみる。from selenium import webdriver brows = webdriver.Chrome() brows.get( 'https://www.yahoo.co.jp/' ) brows.maximize_window() brows.execute_script('window.open(arguments[0], "newtab")', 'https://weather.yahoo.co.jp/weather/?day=1') #新しいタブの要素をクリックする brows.find_element_by_xpath('//a[text()="東京"]').click() #出力 # selenium.common.exceptions.NoSuchElementExceptionすると 要素がない とエラーが出る。
次に、タブを切り替えてから同じ要素をクリックする。
.switch_to_window() に切り替え先のウィンドウハンドルを渡すことで切り替わる。
from selenium import webdriver brows = webdriver.Chrome() brows.get( 'https://www.yahoo.co.jp/' ) brows.maximize_window() brows.execute_script('window.open(arguments[0], "newtab")', 'https://weather.yahoo.co.jp/weather/?day=1') #ここでタブの切り替え brows.switch_to_window( brows.window_handles[1] ) brows.find_element_by_xpath('//a[text()="東京"]').click()
今度は先ほどのエラーは出ず、要素をクリックすることができる。
画面が表示されていても切り替えをしないと要素を取得できない。
0 件のコメント:
コメントを投稿