PowerShellから外部ライブラリのSeleniumを使用し、ブラウザの「Google Chrome」を操作してHTML要素の一部をPowerShell上に取得してみました。
必要なファイル、サンプルコード、実行手順を紹介してみます。
仕様
PowerShellでSeleniumを実行すると、ブラウザが開き、PowerShell上でHTMLの要素を丸ごと取得することができます。
今回は例として、ブラウザは下記のようにGoogle Chromeを使用し、取得するのはHTML全体の内、<title>~</title>の中の「Google」としてみました。
HTML上に黄色く塗った部分が取得されますが、コードの内容を少し修正すれば、HTMLの他の値も同様の取り方で取得可能かと思います。
準備
最初にいくつか外部のファイルを準備する必要があります。
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
# 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 = "https://www.google.co.jp/"
$elements = $chromeDriver.FindElement([OpenQA.Selenium.By]::TagName("title"))
foreach( $e in $elements ){
# titleタグ内を表示
$e.GetAttribute('text')
}
pause
処理の流れとしては下記の通りとなっています。
- 最初にDLLの格納パスを、生成します。
- ここで生成しているのは、ダウンロードしたWevDriverとChromeDriverのパスです。
- DLLのパスからDLLを読み込みます。
- ChromeDriverから、Google Chromeを起動します。
- ChromeDriverから、指定したURLを開きます。
- ChromeDriverから、<title></title>の中身だけを抽出して、標準出力しています。
ファイル配置
下記のようにダウンロードして解凍したファイルと、PowerShellのScriptファイル(*.ps1)を同じフォルダに格納しています。
※「backup」フォルダは解凍前のファイルや、ごみファイルを個人的に取っておいただけのフォルダなので不要です(無くても動作に影響ないです)。
テスト実行
実行は右クリックメニューの「PowerShellで実行」をクリックします。
すると、ブラウザのGoogle Chromeが起動し、PowerShell今ソース上には<title>~</title>の中身が取得され標準出力されていることが確認できました。
参考情報
下記の環境で作成・実行しております。
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 |
以上です。
コメント