明示的にタブの切り替えをする必要がある。
・(準備)タブを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 件のコメント:
コメントを投稿