Seleniumは多言語で利用可能なツールです。PowerShell専用でSeleniumのクラスは用意されていませんが、C#用に.NETのSeleniumは用意されています。公式には例文も無いため、多少構文作成に慣れが必要そうなのですが、なかなか便利そうなので、これからまとめて活用をしていきたいと考えています。
.NETのSeleniumを利用する方法は現在大きく二つあります。一つは、.NET用のSeleniumWebDriverを直接利用する方法と、Seleniumモジュールを利用する方法です。簡単にSeleniumを利用するにはモジュールを使った方が便利ですので、ここでは環境構築方法を以下目次の順番で紹介します。
Seleniumモジュールを利用した方法
インストール
PowerShellモジュールは以下GitHubに掲載されているモジュールをインストールします。
ホームページ上に掲載されているコマンドをPowerShell、WindowsPowerShellで入力、実行します。
Install-Module Selenium
モジュールインストールは、この一文で完了します。PowerShell(Ver7)、WindowsでInstallコマンドを実行した場合、モジュールが保存されるディレクトリは以下のとおりです。
- PowerShell(Ver7)
-
C:\Users\<ユーザ名>\Documents\PowerShell\Modules\Selenium\3.0.1
- WindowsPowerShell
-
C:\Program Files\WindowsPowerShell\Modules\Selenium\3.0.1
WindowsPowerShellでInstall-Moduleコマンドを実行する場合、Nugetプロバイダをインストールする必要があります。参考にWindowsPowerShellのインストールの状況を掲載しておきます。
WindowsPowerShell Install-Module Selenium
Windowsデスクトップ上で「Win+R」を打ち、ファイル名を指定して実行画面を出し、「powershell」と入力後、「Shift+Ctrl+Enter」にて管理者権限でWindowsPowerShellを開きます。
「Install-Module Selenium」コマンド入力し、実行します。Nugetプロバイダのインストールが求められますので、「Y」を入力し、インストールを続行します。
Seleniumモジュールをインストールします。案内に従ってインストールを完了させます。
コマンド例
GitHubに掲載されているコマンド例を少しアレンジして紹介します。
指定URLをChromeで開く
ブラウザを開いて指定したURLに変遷します。2秒待機後にブラウザを閉じます。
$Driver = Start-SeChrome
Enter-SeUrl https://programan.org/ -Driver $Driver
Start-Sleep -Seconds 2
SeClose $Driver
- 1行目
-
変数$DriverにChromeDriverを代入します。
- 2行目
-
URLを指定し、ブラウザを開きます。引数にChromeDriverを代入した$Driverを指定します。
- 3行目
-
2秒待機
- 4行目
-
ChromeDriverを終了し、ブラウザを閉じます。(ExcelVBAのSeleniumBasicと違って、ブラウザ終了を明示しなければブラウザが閉じられません。
Web要素のキャッチ
指定URLに変遷しWeb要素をキャッチします。
$Driver = Start-SeChrome
Enter-SeUrl https://the-internet.herokuapp.com/tables -Driver $Driver
Find-SeElement -Driver $Driver -Id "table1"
Start-Sleep -Seconds 2
SeClose $Driver
- 1行目
-
変数$DriverにChromeDriverを代入します。
- 2行目
-
URLを指定し、ブラウザを開きます。引数にChromeDriverを代入した$Driverを指定します。
- 3行目
-
Id:"table1"を指定してWeb要素キャッチ
- 4行目
-
2秒待機。
- 5行目
-
ChromeDriverを終了し、ブラウザを閉じます。
Web要素をクリック
指定URLに変遷し、キャッチしたWeb要素をクリックします。
$Driver = Start-SeChrome
Enter-SeUrl https://programan.org/ -Driver $Driver
$Element = Find-SeElement -Driver $Driver -ClassName "newmark"
Invoke-SeClick -Element $Element[0]
- 1行目
-
変数$DriverにChromeDriverを代入します。
- 2行目
-
URLを指定し、ブラウザを開きます。引数にChromeDriverを代入した$Driverを指定します。
- 3行目
-
ClassName:"newmark"を指定してWeb要素キャッチ
- 4行目
-
キャッチしたWeb要素をクリック。要素を複数キャッチする場合は、配列番号を指定。
文字列の入力
Googleデスクトップ画面を開き、検索欄に文字列を入力し、Enterを押下します。
$Driver = Start-SeChrome
Enter-SeUrl "https://google.co.jp" -Driver $Driver
$Element = Find-SeElement -Driver $Driver -Name "q"
Send-SeKeys -Element $Element -Keys "Programan"
Send-SeKeys -Element $Element -Keys "{{Enter}}"
- 1行目
-
変数$DriverにChromeDriverを代入します。
- 2行目
-
URLを指定し、ブラウザを開きます。引数にChromeDriverを代入した$Driverを指定します。
- 3行目
-
Name:"q"を指定して検索欄のWeb要素キャッチ
- 4行目
-
検索欄に"Programan"と入力。
- 5行目
-
Enterを入力。特殊キーを入力する場合は{{}}でコマンドを入力します。入力可能な特殊キーはGet-SeKeysで閲覧できます。
Chromeの起動オプション利用
Chromeをオプション付きで起動するコマンド例です。
- ヘッドレスモードでChrome起動
-
$Driver = Start-SeChrome -Headless Start-Sleep -Seconds 2 SeClose $Driver
- シークレットモードでChrome起動
-
$Driver = Start-SeChrome -Incognito Start-Sleep -Seconds 2 SeClose $Driver
- デフォルトのダウンロードパス指定
-
$Driver = Start-SeChrome -DefaultDownloadPath "C:\Windows" -StartURL 'https://google.co.jp' $Element = Find-SeElement -Driver $Driver -Name "q" Send-SeKeys -Element $Element -Keys "デフォルトダウンロードパス設定" Start-Sleep -Seconds 2 SeClose $Driver
- Chromeブラウザ立ち上げとURL変遷を1コマンドで実行
-
$Driver = Start-SeChrome -StartURL 'https://google.co.jp' Start-Sleep -Seconds 2 SeClose $Driver
- 複数の引数を用いてChromeを起動
-
$Driver = Start-SeChrome -Arguments @('Incognito','start-maximized') Enter-SeUrl "https://programan.org/" -Driver $Driver Start-Sleep -Seconds 2 SeClose $Driver
- 既定のプロフィールを指定してChromeを起動する
-
$Driver = Start-SeChrome -ProfileDirectoryPath "C:\Users\<ユーザ名>\AppData\Local\Google\Chrome\User Data" Enter-SeUrl "https://programan.org/" -Driver $Driver Start-Sleep -Seconds 2 SeClose $Driver
<ユーザ名>に自身のPCのユーザ名を入力
.NETを直接利用する方法
前段ではSeleniumモジュールでPowerShellのSeleniumを操作する方法を紹介しました。Seleniumモジュールも.NETを利用しており、モジュールの構文は.NETを利用した構文になっています。Seleniumモジュールでは扱っていないSeleniumの構文はこちらの.NETを直接利用してコマンドを実行することになります。
ここでは、Seleniumモジュールを使用しないでPowerShellにてSeleniumを操作する方法を紹介します。
動作環境構築
PowerShellでSeleniumを動作させる環境構築をしていきます。順番としては、
WebDriver.dllの配置 → ChromeDriverの配置
WebDriver.dllファイルの配置
.NET用のSelenium.DriverをSelenium開発ページからダウンロードし、任意フォルダに保存します。詳しい手順は以下のとおりです。
以下ページに変遷し、Selenium.Driverをダウンロードします。
画面右下の「Download pachage」をクリックして、ファイルをダウンロードします。
ダウンロードしたnupkgファイルのプロパティを開き、セキュリティ欄に「許可する」のチェックを入れて、「OK」をクリックします。
selenium.webdriverファイルの拡張子を「nupkg」から「zip」へ変更します。
- 変更前(nupkg)
- 変更後(zip)
「selenium.webdriver.※.※.※.zip」ファイルを解凍し、./lib\netstandard2.1フォルダにあるWebDriverをコピーします。
WebDriver.dllを指定し易い任意フォルダに保存します。今回は、以下フォルダに保存しました。
C:\Users\<ユーザ名>\Documents\PowerShell\WebDriver
ChromeDriverの配置
次にChromeDriverを配置します。今回はSeleniumBasicのインストールフォルダ内にChromeDriverを保存します。詳しくは以下ページを参照ください。
コマンド例
動作環境が整ったら、実際にコマンドを入力して動作を確認してみたいと思います。
以下コマンド例は、指定URLをChromeブラウザで開き、Web要素のキャッチまで実行します。
$shell = New-Object -ComObject Shell.Application
$Mydoc = $shell.NameSpace("shell:Personal").Self.Path
$webDriverDllPath = "$Mydoc\PowerShell\WebDriver\WebDriver.dll"
$chromeDriverDirPath = "C:\Program Files\SeleniumBasic\"
#WebDriverの取得
Add-Type -Path $webDriverDllPath
#chromeブラウザの起動
$Driver = New-Object OpenQA.Selenium.Chrome.ChromeDriver($chromeDriverDirPath)
#URLを開き、Web要素取得
$Driver.Url = "https://programan.org/"
$By = "ClassName"
$Selection ="newmark"
$Driver.FindElement([OpenQA.Selenium.By]::$By($Selection))
#ブラウザを閉じる
$Driver.Quit()
- 3行目
-
変数$webDriverDllPathにコピーしたWebDriver.dllのフルパス名を代入
- 4行目
-
変数$chromeDriverDirPathにダウンロードした最新のChromeDriverのディレクトリパスを代入
- 7行目
-
Add-TypeコマンドでWebDriverを取得
- 10行目
-
OpenQAクラスを利用し、ChromeDriverを生成
- 13行目
-
URLを指定し、ページ変遷
- 16行目
-
.NetのOpenQA.Selenium.Byメソッドを呼び出し、Web要素キャッチ方法と、Web要素の指定を実行
- 19行目
-
Driverを終了し、ブラウザを閉じる