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
