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
					

参考

ウィンドウまたはタブを閉じる