Seleniumの使い方 - ウィンドウ・タブ操作
Seleniumでウィンドウ(ブラウザ)・タブを操作する方法です。
新しいウィンドウ・新しいタブの作成
SwitchTo().NewWindow()
メソッドを使用することで、新しいタブまたはウィンドウを作成し、表示を切り替えます。
引数でタブ/ウィンドウのどちらを作成するか指定します。
Private Sub btnNewWindow_Click(sender As Object, e As EventArgs) Handles btnNewWindow.Click '新規ウィンドウを作成して、そのウィンドウをアクティブにする。 '以降の制御はこのウィンドウに対して行われる。 _browser.SwitchTo().NewWindow(WindowType.Window) End Sub Private Sub btnNewTab_Click(sender As Object, e As EventArgs) Handles btnNewTab.Click '新規タブを作成して、そのタブをアクティブにする。 '以降の制御はこのウィンドウに対して行われる。 '複数のウィンドウを表示していた場合にタブを作成すると、最初のウィンドウに対してタブが追加される。 _browser.SwitchTo().NewWindow(WindowType.Tab) End Sub
private void btnNewWindow_Click(object sender, EventArgs e) { //新規ウィンドウを作成して、そのウィンドウをアクティブにする。 //以降の制御はこのウィンドウに対して行われる。 _browser.SwitchTo().NewWindow(WindowType.Window); } private void btnNewTab_Click(object sender, EventArgs e) { //新規タブを作成して、そのタブをアクティブにする。 //以降の制御はこのウィンドウに対して行われる。 //複数のウィンドウを表示していた場合にタブを作成すると、最初のウィンドウに対してタブが追加される。 _browser.SwitchTo().NewWindow(WindowType.Tab); }
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC #Chromeブラウザを表示(環境変数のPATHにドライバーのパスを追加済とする) driver = webdriver.Chrome() #ページを表示 driver.get("https://www.yahoo.co.jp") #新規タブを作成して、そのタブをアクティブにする。 driver.switch_to.new_window('tab') #新規ウィンドウを作成して、そのウィンドウをアクティブにする。 driver.switch_to.new_window('window')
Sub NewWindows() '新規タブでURLを開く driver.ExecuteScript ("window.open('https://www.yahoo.co.jp/');") '新規タブでblankページを開く driver.ExecuteScript ("window.open();") End Sub
参考
操作対象の切り替え
Seleniumが操作対象としているウィンドウ・タブを切り替えることで、他のウィンドウ・タブを操作することができます。
_browser.CurrentWindowHandle
メソッドで、Selenimuが操作対象としているウィンドウ・タブのウィンドウハンドル(一意の識別子)を取得できます。
_browser.WindowHandles
メソッドで、Selenimuが操作可能な全てのウィンドウ・タブのウィンドウハンドルのリストを取得できます。
ウィンドウ・タブを切り替える場合は、_browser.SwitchTo().Window(window)
メソッドの引数にウィンドウハンドルを指定を指定します。
Private Sub btnChange_Click(sender As Object, e As EventArgs) Handles btnChange.Click 'アクティブなブラウザのウィンドウハンドルを保持する Dim originalWindow As String = _browser.CurrentWindowHandle '他のウィンドウをアクティブにする For Each window As String In _browser.WindowHandles If originalWindow <> window Then _browser.SwitchTo().Window(window) Exit For End If Next MessageBox.Show("ウィンドウ・タブの切り替え") '最初に開いたウィンドウ・タブに切り替える _browser.SwitchTo().Window(_browser.WindowHandles.First) MessageBox.Show("最初に開いたウィンドウ・タブ") '最後に開いたウィンドウ・タブに切り替える _browser.SwitchTo().Window(_browser.WindowHandles.Last) MessageBox.Show("最後に開いたウィンドウ・タブ") End Sub
private void btnChange_Click(object sender, EventArgs e) { //アクティブなブラウザのウィンドウハンドルを保持する string originalWindow = _browser.CurrentWindowHandle; //他のウィンドウをアクティブにする foreach (string window in _browser.WindowHandles) { if (originalWindow != window) { _browser.SwitchTo().Window(window); break; } } MessageBox.Show("ウィンドウ・タブの切り替え"); //最初に開いたウィンドウ・タブに切り替える _browser.SwitchTo().Window(_browser.WindowHandles.First()); MessageBox.Show("最初に開いたウィンドウ・タブ"); //最後に開いたウィンドウ・タブに切り替える _browser.SwitchTo().Window(_browser.WindowHandles.Last()); MessageBox.Show("最後に開いたウィンドウ・タブ"); }
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from tkinter import messagebox #Chromeブラウザを表示(環境変数のPATHにドライバーのパスを追加済とする) driver = webdriver.Chrome() #ページを表示 driver.get("https://www.yahoo.co.jp") #アクティブなブラウザのウィンドウハンドルを保持する original_window = driver.current_window_handle #新規ウィンドウを開く driver.execute_script("window.open()") #最初のウィンドウを表示 driver.switch_to.window(driver.window_handles[1]) #他のウィンドウをアクティブにする for window_handle in driver.window_handles: if window_handle != original_window: driver.switch_to.window(window_handle) break messagebox.showinfo("ウィンドウ・タブの切り替え") #最初に開いたウィンドウ・タブに切り替える driver.switch_to.window(driver.window_handles[0]) messagebox.showinfo("最初に開いたウィンドウ・タブに切り替え") #最後に開いたウィンドウ・タブに切り替える driver.switch_to.window(driver.window_handles[len(driver.window_handles) - 1]) messagebox.showinfo("最後に開いたウィンドウ・タブに切り替え");
Sub SwitchTab() '新規タブでURLを開く driver.ExecuteScript ("window.open('https://www.yahoo.co.jp/');") driver.ExecuteScript ("window.open('https://www.google.co.jp/');") driver.ExecuteScript ("window.open('https://web.biz-prog.net/');") MsgBox "複数サイトの表示" '指定したタイトルのタブに切り替える driver.SwitchToWindowByTitle ("Google") MsgBox "指定したタイトルのタブに切り替え" '今表示しているタブの次に開かれたタブに切り替える driver.SwitchToNextWindow MsgBox "次のタブに切り替え" '今表示しているタブの前に開かれたタブに切り替える driver.SwitchToPreviousWindow MsgBox "前のタブに切り替え" End Sub
参考
ウィンドウのサイズの参照/設定
ウィンドウのサイズの取得と変更を行います。
Private Sub btnSizeSet_Click(sender As Object, e As EventArgs) Handles btnSizeSet.Click 'ブラウザのサイズを取得 Dim size = _browser.Manage().Window.Size MessageBox.Show($"{size.Width},{size.Height}") 'ブラウザのサイズを設定 _browser.Manage().Window.Size = New Size(1024, 768) End Sub
private void btnSizeReg_Click(object sender, EventArgs e) { //ブラウザのサイズを取得 System.Drawing.Size size = _browser.Manage().Window.Size; MessageBox.Show($"{size.Width},{size.Height}"); //ブラウザのサイズを設定 _browser.Manage().Window.Size = new Size(1024, 768); }
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC #Chromeブラウザを表示(環境変数のPATHにドライバーのパスを追加済とする) driver = webdriver.Chrome() #ページを表示 driver.get("https://www.yahoo.co.jp") #ブラウザのサイズを取得 print(driver.get_window_size()) print(driver.get_window_size().get("width")) print(driver.get_window_size().get("height")) #ブラウザのサイズを設定 driver.set_window_size(1024, 768)
Sub WindowSize() 'ブラウザのサイズを設定 driver.Window.SetSize 1024, 768 'ブラウザのサイズを取得 MsgBox driver.Window.Size.Width & "," & driver.Window.Size.Height End Sub
参考
ウィンドウの位置の参照/設定
ウィンドウの位置の取得と変更を行います。
Private Sub btnSizeReg_Click(sender As Object, e As EventArgs) Handles btnSizeReg.Click 'ブラウザの位置を取得 Dim position = _browser.Manage().Window.Position MessageBox.Show($"{position.X},{position.Y}") 'ブラウザを移動 _browser.Manage().Window.Position = New Point(0, 0) End Sub
private void btnSizeReg_Click(object sender, EventArgs e) { //ブラウザの位置を取得 Point position = _browser.Manage().Window.Position; MessageBox.Show($"{position.X},{position.Y}"); //ブラウザを移動 _browser.Manage().Window.Position = new Point(0, 0); }
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from tkinter import messagebox #Chromeブラウザを表示(環境変数のPATHにドライバーのパスを追加済とする) driver = webdriver.Chrome() #ページを表示 driver.get("https://www.yahoo.co.jp") #ブラウザの位置を取得 print(driver.get_window_position()) print(driver.get_window_position().get("x")) print(driver.get_window_position().get("y")) #ブラウザのサイズを設定 driver.set_window_position(0, 0)
Sub WindowPosition() 'ブラウザの位置を設定 driver.Window.SetPosition 100, 100 'ブラウザのサイズを取得 MsgBox driver.Window.Position.X & "," & driver.Window.Position.Y End Sub
参考
ウィンドウの最大化/最小化/全画面
ウィンドウを最大化/最小化/全画面表示を行います。
Private Sub btnMaxMin_Click(sender As Object, e As EventArgs) Handles btnMaxMin.Click 'ブラウザの最大化 _browser.Manage().Window.Maximize() MessageBox.Show("最大化") 'ブラウザの最小化 _browser.Manage().Window.Minimize() MessageBox.Show("最小化") '全画面表示 _browser.Manage().Window.FullScreen() MessageBox.Show("全画面表示") End Sub
private void btnMaxMin_Click(object sender, EventArgs e) { //ブラウザの最大化 _browser.Manage().Window.Maximize(); MessageBox.Show("最大化"); //ブラウザの最小化 _browser.Manage().Window.Minimize(); MessageBox.Show("最小化"); //全画面表示 _browser.Manage().Window.FullScreen(); MessageBox.Show("全画面表示"); }
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from tkinter import messagebox #Chromeブラウザを表示(環境変数のPATHにドライバーのパスを追加済とする) driver = webdriver.Chrome() #ページを表示 driver.get("https://www.yahoo.co.jp") #ブラウザの最大化 driver.maximize_window() messagebox.showinfo("最大化") #ブラウザの最小化 driver.minimize_window() messagebox.showinfo("最小化") #全画面表示 driver.fullscreen_window() messagebox.showinfo("全画面表示")
Sub MaxMin() 'ブラウザの最大化 driver.Window.Maximize MsgBox "最大化" 'ブラウザの最小化 'SeleniumBasicには最小化の機能はない '全画面表示 'SeleniumBasicには全画面表示の機能はない End Sub
参考
終了処理
Close
メソッドで操作対象のウィンドウ・タブを終了します。
引き続き残るウィンドウ・タブで操作を行う場合は、残っているウィンドウ・タブに操作対象を切り替えてやらないと、NoSuchWindowException
が発生する場合があります。
Quit
メソッドはブラウザを終了します。
Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click Dim originalWindow = _browser.CurrentWindowHandle _browser.Close() '残っているウィンドウ・タブに切り替える _browser.SwitchTo().Window(originalWindow) End Sub Private Sub btnQuit_Click(sender As Object, e As EventArgs) Handles btnQuit.Click _browser.Quit() End Sub
private void btnClose_Click(object sender, EventArgs e) { _browser.Close(); //残っているウィンドウ・タブに切り替える _browser.SwitchTo().Window(_originalWindow); } private void btnQuit_Click(object sender, EventArgs e) { _browser.Quit(); }
driver.quit()
Sub Quit() driver.Close driver.Quit End Sub