PowerShellによりGoogleChromeを操作して、スクリーンショットを取得するサンプルコードを紹介します。
仕様
PowerShellでSeleniumを実行すると、ブラウザが開き、*.pngでスクリーンショットが取得されます。
実行イメージ
準備
最初にいくつか外部のファイルを準備する必要があります。
PowerShell単体ではGoogleChromeを操作できず、Seleniumというブラウザ操作を自動化するフレームワークが必要になるからです。
必要なファイル
下記の2ファイルを、PowerShellのScriptファイル(*.ps1)と同じフォルダに格納します。
ファイル | 挙動 | ダウンロード元 | 補足 |
---|---|---|---|
Selenium.WebDriver | ブラウザに組み込まれている自動化の仕組み(Driver)を使用して、ブラウザを操作する。 | Selenium WebDriver | PowerShellの場合は、画面をスクロールして、C#用をダウンロードします。 「selenium.webdriver.X.X.X.nupkg」→「selenium.webdriver.4.8.1.zip」に拡張子を変更して解凍します。 |
Chrome Driver | 各ベンダーによって公開されたブラウザを操作するためのAPIを公開したライブラリ。 ベンダーによって提供されているため、標準のSeleniumには含まれていない。 | ChromeDriver | 今回はWindows環境でGoogle Chromeを使用するので、Windows用の「chromedriver_win32.zip」をダウンロードします。 |
ソースコード
下記のようなソースコードを用意しています。
browsing.ps1
Webページのスクリーンショットを取得するコードです。
スクリーンショットの取得対象のWebページは外部のWebページではなく、page1.htmlとしています。
# dllパス生成
$currentPath = (Convert-Path .)
$webDriverDllPath = $currentPath + "\selenium.webdriver.4.8.1\lib\net48\WebDriver.dll"
$chromeDriverDirPath = $currentPath + "\chromedriver_win32"
# パスからdll読み込み
Add-Type -Path $webDriverDllPath
# chrome起動
$chromeDriver = New-Object OpenQA.Selenium.Chrome.ChromeDriver($chromeDriverDirPath)
# URL開く
$chromeDriver.Url = $currentPath + "\page1.html"
# スクリーンショットの取得
$screenShot = $chromeDriver.GetScreenshot()
$screenShot.SaveAsFile($currentPath + '\a.png')
pause
page1.html
上記の*.psでキャプチャを取る対象のWebページです。
Webページは別にhttps://~を指定してもよいので、このファイルは必須ではないです。
<html>
<head>
<title>ページ1</title>
<script>
function displayAlert(){
alert(document.getElementById('input1').value);
}
</script>
</head>
<body>
ページ1です。
<form method="post">
<input type="text" id="input1" name="input1">
<input type="button" id="button1" value="送信ボタン" onclick="displayAlert();">
</form>
</body>
</html>
ファイル配置
下記のようにダウンロードして解凍したファイルと、PowerShellのScriptファイル(*.ps1)、キャプチャを取得するHTMLファイル(*.html)を同じフォルダに格納しています。
※「backup」フォルダは解凍前のファイルや、ごみファイルを個人的に取っておいただけのフォルダなので不要です(無くても動作に影響ないです)。
テスト実行
実行は右クリックメニューの「PowerShellで実行」をクリックします。
すると、ブラウザのGoogle Chromeが起動し、page1が表示されました。
ディレクトリに注目すると、a.pngのファイルが増えています。
こちらのa.pngを開くとキャプチャが取得されていることが確認できました。
タスクスケジューラと組み合わせると、定期的にキャプチャが取得出来てよいかもしれません。
あとはリンクをたどるたびにキャプチャを取っていくとか、利用方法は様々ですね。
参考情報
下記の環境で作成・実行しております。
No. | 環境 | バージョン |
---|---|---|
1 | OS | Windows10 |
2 | PowerShell | 5.1 |
3 | ブラウザ | Google Chrome バージョン: 111.0.5563.65(Official Build) (64 ビット) |
4 | selenium.webdriver | 4.8.1 C#用 |
5 | chromedriver | 111.0.5563.64 |
以上です。
コメント