PowerShellでSeleniumモジュールを利用する方法

 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
STEP
WindowsPowerShellを管理者権限で開く

Windowsデスクトップ上で「Win+R」を打ち、ファイル名を指定して実行画面を出し、「powershell」と入力後、「Shift+Ctrl+Enter」にて管理者権限でWindowsPowerShellを開きます。

STEP
Install-Module Seleniumを実行

「Install-Module Selenium」コマンド入力し、実行します。Nugetプロバイダのインストールが求められますので、「Y」を入力し、インストールを続行します。

STEP
Selenium Moduleのインストール

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開発ページからダウンロードし、任意フォルダに保存します。詳しい手順は以下のとおりです。

STEP
Selenium.Driverのダウンロード

以下ページに変遷し、Selenium.Driverをダウンロードします。

画面右下の「Download pachage」をクリックして、ファイルをダウンロードします。

STEP
selenium.webdriver.※.※.※.nupkg ファイルのプロパティ編集

ダウンロードしたnupkgファイルのプロパティを開き、セキュリティ欄に「許可する」のチェックを入れて、「OK」をクリックします。

STEP
拡張子の変更(.nupkg⇒.zip)

selenium.webdriverファイルの拡張子を「nupkg」から「zip」へ変更します。

変更前(nupkg)
変更後(zip)
STEP
zipファイルの解凍、WebDriver.dllのコピー

「selenium.webdriver.※.※.※.zip」ファイルを解凍し、./lib\netstandard2.1フォルダにあるWebDriverをコピーします。

STEP
WebDriver.dllを任意のフォルダに保存

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を終了し、ブラウザを閉じる

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

VBAを中心とした自動化、効率化の手法を紹介しています。現在は、SeleniumBasicのexamplesを紹介しています。その内、SeleniumBasic以外の手法も掲載したいと思っております。

目次