🐚

【PowerShell】SeleniumモジュールでWebスクレイピングしたい

2020/09/27に公開

初めに

Windowsで面倒な環境構築をせずにスクレイピングがしたい
最近はWSL2でdockerコンテナを動かせば簡単にseleniumの環境構築もできると思いますが、会社の環境だとできなかったりするのでもっとお手軽にやりたい。
というわけで調べたところPowerShell用のモジュールがあったので使用してみることに。
大まかな使いかたをまとめました。

環境

$PSVersionTable

Name                           Value                                                                                  
----                           -----                                                                                  
PSVersion                      5.1.19041.1                                                                            
PSEdition                      Desktop 
...

#Seleniumモジュールのバージョン
Get-InstalledModule -Name selenium

Version              Name                                Repository           Description                             
-------              ----                                ----------           -----------                             
3.0.1                Selenium                            PSGallery            Web automation using the Selenium Web...

クロームのバージョン
Chromeのバージョン.png

実際に使ってみる

モジュールのインストール

下記コマンドで最新のモジュールをインストールできます。

Install-Module -Name Selenium

指定したブラウザを起動する

#Chromeを使用する場合
$Driver = Start-SeChrome

#Edgeを使用する場合
$Driver = Start-SeEdge

#Firefoxを使用する場合
$Driver = Start-SeFirefox

#IEを使用する場合
$Driver = Start-SeInternetExplorer

#-Headlessオプションでブラウザ非表示となる
$Driver = Start-SeChrome -Headless

ここではまった事

いつも通り$Driver = Start-SeChromeを実行するとエラーになった。
そういえば、クロームをアップデートした後だったのでバージョンを確認して、対応するChromeDriverをダウンロードしなおしたら正常に動作した。ダウンロードはこちらから

下記にあるドライバーを更新しました。(クロームだとchromedriver.exe)
C:\Users\ユーザ名\Documents\WindowsPowerShell\Modules\Selenium\3.0.1\assemblies

指定のURLへ移動

Enter-SeUrl "<URL>" -Driver $Driver

エレメントの取得

#IDで指定
$Element = Find-SeElement -Driver $Driver -Id "<ID>"

#ClassNameで指定
$Element = Find-SeElement -Driver $Driver -ClassName "<ClassName>"

#TagNameで指定(下記はinputタグすべてを抽出)
$Element = Find-SeElement -Driver $Driver -TagName input

#XPathで指定
$Element = Find-SeElement -Driver $Driver -XPath "<XPath>"

取得したエレメントに対する操作

キーボード入力

#通常文字列
Send-SeKeys -Element $Element -Keys "<文字列>"

#特殊キー
Send-SeKeys -Element $Element -Keys "{{ENTER}}"

クリックする

#下記2つは同じ動作をするはず。。
$Element.Click()
$Element | Invoke-SeClick -Driver $Driver 

#JavaScriptでクリック(上記2つでクリックできなかった場合に使用してうまくいった。)
$Element | Invoke-SeClick -JavaScriptClick -Driver $Driver 

スクリーンショットを保存する

$Screenshot = Invoke-SeScreenshot -Target $Driver
Save-SeScreenshot -Screenshot $Screenshot -Path ./test.png

終了して閉じる

Stop-SeDriver -Driver $Driver

参考

GitHub : selenium-powershell

Discussion