ブラウザの最大化&ウインドウの大きさや位置を変える
Seleniumbasic(セレニウムベーシック)でブラウザを起動した後でもブラウザの大きさや位置を変更できます。
基本は1画面1ウインドウ、最大化で運用しますがケースによってはウインドウに変更を加えたい事があります。
- 全画面表示
- 画面の左半分or右半分だけに表示
- 画面の上半分or下半分だけに表示
まずは画面サイズを取得します。取得した値を加工する事でウインドウの大きさや位置を操作できます。
逐次ウインドウの切り替えができるとよりグラフィカルでスムーズなプレゼンを用意する事もできますよ。
Webスクレイピングは作業を見せる為にも使えるんですよ。
繰り返し処理を組んでおけばずっと同じ動きをしてくれます。イベント等で使える機能です。
お知らせ記事後半にはウインドウを動かす動画(30秒程)を用意しています。イメージを掴んでください。
では早速画面サイズを取得しブラウザを好きな位置、大きさに動かしてみましょう。
関連情報
画面のサイズを変えた際は取得したい情報や入力したいテキストボックスが見えなくなる事があります。
任意の要素までスクロールさせてから次の作業をする事でより分かり易いデータを作る事ができます。
事例
ブラウザを起動させてから私のブログを表示させます。その後ウインドウの大きさや位置を変えてみます。
1~3の順でウインドウが動きます。見易くする為に作業の間に2秒ずつ待ちをつくりました。
- 1ブラウザを起動させてウインドウを一旦最大化します
- 2そのあとウインドウを左半分に配置、続いて右半分に配置します
- 3最後にウインドウを上半分、下半分に配置してブラウザを閉じます
コード
続いてコードの紹介です。
Sub ウインドウのコントロール()
Dim dvr As New ChromeDriver
Dim h As Long
Dim w As Long
With dvr
.Start "chrome"
.Get "https://www.slt-pgming-21.net/"
.Window.Maximize
.Wait 2000
h = .Window.Size.Height
w = .Window.Size.Width
.Window.SetSize w / 2, h
.Window.SetPosition 0, 0
.Wait 2000
.Window.SetPosition w / 2, 0
.Wait 2000
.Window.SetSize w, h / 2
.Window.SetPosition 0, 0
.Wait 2000
.Window.SetPosition 0, h / 2
.Wait 2000
End With
End Sub
動画
実際にコードを実行した際にディスプレイで起こる現象を動画にしました。
(音無で約30秒です。動画は自動ループを組んであります。)
動画は一旦再生されるとループする様にしておきました。加えて見易さ向上の為少し遅く再生しています。
イベント会場などで流せば「Excelからブラウザを自動でコントロールできる」というアピールになりますね。
解説
ブラウザの最大化は1行のコードで済みますし使用頻度も高いので既知であると信じて説明不要にします。
残りのコードを解説します。今回のコードはWindowクラスに配置されたメソッドがメインです。
Size、SetSize、SetPositionメソッドです。
これらを駆使してウインドウの大きさや位置を変えています。
Sizeメソッド
最初はSizeメソッドです。Windowクラスが持っているSizeメソッドの戻り値はSizeクラスです。
続いてSizeクラスを見てみましょう。
Sizeクラスを見るとHeightプロパティとWidthプロパティがありますね。
2つのプロパティはLong型の数値が戻り値です。ウインドウの縦横の幅を返してくれるのに役立ちます。
このプロパティを使ってサイズを最大化したウインドウの縦幅、横幅を変数に取得します。
SetSizeメソッド
続いてSetSizeメソッドです。引数は(横幅,縦幅)です。このメソッドも引数はLong型です。
このメソッドの引数にSizeクラスで取得した縦横の幅を使います。
このメソッドで表示させるウインドウの大きさを決めています。
SetPositionメソッド
最後にSetPositionメソッドです。やはり引数はLong型です。
Xは横の位置、Yは縦の位置を指定します。画面左上がX、Y共にゼロという仕様です。
このメソッドで表示させるウインドウの位置(移動先)を決めています。
演算では変数も使えるのか
VBA初心者様から質問をいただきましたので回答します。VBA中~上級者様はスルーしてください。
変数を使った演算(割り算)
コードの中で割り算をしています。まずは「w/2」で画面半分のウインドウの大きさを作っています。
その後同様に「w/2」で画面右半分にウインドウを置く時の始点を作っています。
縦幅(H)も同じ考え方です。これで画面半部の大きさのウインドウが色々な位置に配置されます。
簡単な演算で済むところは関数化せずコードを直書きする事をおすすめします。
まとめ
これで画面サイズを取得する事ができる様になりました。これによりウインドウの最大化も可能です。
応用すると1画面に2つのウインドウを配置する事も可能です。しかし運用時には注意が必要です。
ウインドウの選択と画面スクロールを使いこなせないとエラーが頻発します。
冒頭で先程スクロールの記事へのリンクを紹介しています。必要に応じてご覧ください。
続いてここではウインドウの選択の記事を紹介しておきます。