概要
Selenium-ModuleでChromeブラウザを開始します。起動オプションが豊富に用意されています。
コマンド(Commond)
Start-SeChrome
代替コマンド(Alias)
SeChrome
構文(Syntax)
Start-SeChrome [[-StartURL] <string>] [-Arguments <array>] [-HideVersionHint] [-DefaultDownloadPath <FileInfo>] [-ProfileDirectoryPath <FileInfo>] [-DisableBuiltInPDFViewer <bool>] [-EnablePDFViewer] [-Incognito] [-DisableAutomationExtension] [-BinaryPath <Object>] [-WebDriverDirectory <Object>] [-Quiet] [-AsDefaultDriver] [-ImplicitWait <int>] [<CommonParameters>]
オプション
Name | 引数型 | 解説 | Short Example |
---|---|---|---|
StartURL | string | Chrome起動 | $Driver = Start-SeChrome -StartURL https://programan.org/ |
Arguments | array | 複数引数を利用する場合 | $Driver = Start-SeChrome -Arguments @('Incognito','start-maximized') |
HideVersionHint | Write-Verboseによるchromeのバージョンヒントを隠す | $Driver = Start-SeChrome -HideVersionHint | |
DefaultDownloadPath | FileInfo | デフォルトのダウンロードパス設定 | $Driver = Start-SeChrome -DefaultDownloadPath $dir |
ProfileDirectoryPath | FileInfo | プロフィールパスを指定して起動 | $Driver =Start-SeChrome -ProfileDirectoryPath "$env:LOCALAPPDATA\Google\Chrome\User Data" |
DisableBuiltInPDFViewer | bool | デフォルトで$true設定。手動で設定はしない | |
EnablePDFViewer | PDFビューアをセット | $Driver = Start-SeChrome -StartURL "https://www.jka.or.jp/jka-news-pdf/jka-no34-pdf10mb/" -EnablePDFViewer | |
Incognito | シークレットモードの設定 | $Driver = Start-SeChrome -Incognito | |
DisableAutomationExtension | 「〜自動化で制御」非表示と拡張機能の自動更新回避 | Start-SeChrome -DisableAutomationExtension | |
BinaryPath | Object | Chromeの起動ファイルをオブジェクトパス指定 指定のChromeバージョンを利用する場合に使用 | Start-SeChrome -BinaryPath "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" |
WebDriverDirectory | Object | ChromeDriverのフォルダパスをディレクトリ指定 | $Driver = Start-SeChrome -WebDriverDirectory "C:\Users\48745\Downloads\chromedriver_win32" |
Quiet | ターミナルのDriverServiceコマンドを非表示 | $Driver = Start-SeChrome -Quiet | |
AsDefaultDriver | 現在のドライバーをデフォルトドライバーとして設定 | $Driver = Start-SeChrome -AsDefaultDriver | |
ImplicitWait | int | 暗黙的な待機時間の設定 | $Driver = Start-SeChrome -ImplicitWait 20 -Quiet |
CommonParameters | 共通パラメータ | ||
Headless | ヘッドレスモードで起動 | $Driver = Start-SeChrome -Headless -StartURL https://programan.org/ | |
Maximized | 画面最大化で起動 | $Driver = Start-SeChrome -Maximized | |
Fullscreen | フルスクリーンで起動 | $Driver = Start-SeChrome -Fullscreen | |
Minimized | 画面最小化で起動 | $Driver = Start-SeChrome -Minimized |
※ShortExampleは、動作確認ができたコードを記載しています。
オブジェクトプロパティ
Name | 出力例 |
---|---|
FileDetector | OpenQA.Selenium.DefaultFileDetector |
NetworkConditions | |
Url | data |
Title | |
PageSource | <html><head></head><body></body></html> |
CurrentWindowHandle | 9CAFD1A38D064F68CF1306FA76CC7C96 |
WindowHandles | {9CAFD1A38D064F68CF1306FA76CC7C96} |
Keyboard | OpenQA.Selenium.Remote.RemoteKeyboard |
Mouse | OpenQA.Selenium.Remote.RemoteMouse |
HasWebStorage | False |
WebStorage | |
HasApplicationCache | False |
ApplicationCache | |
HasLocationContext | False |
LocationContext | |
Capabilities | 省略 |
SessionId | |
IsActionExecutor | True |
Example
使用例として、空手協会のPdfリンクテキストをクリックしてPdfファイルをダウンロードする方法を紹介します。Selenium-Moduleの場合、デフォルト設定でPdfファイルリンクのクリックはPdfビューアを開かず、ダウンロードする設定になっております。
$shell = New-Object -ComObject Shell.Application
$DownloadDir = $shell.NameSpace("shell:Downloads").Self.Path
$searchDir = $DownloadDir + "\*.pdf"
$BaseFile = Get-ChildItem -Path $searchDir
$Driver = Start-SeChrome -DefaultDownloadPath $DownloadDir -StartURL "https://www.jka.or.jp/jka-news-pdf/jka-no34-pdf10mb/"
$Element = Find-SeElement -Driver $Driver -PartialLinkText "JKAニュース No34"
Invoke-SeClick -Element $Element
$flg = $false
do {
$CompFile = Get-ChildItem -Path $searchDir
$diffResult = Compare-Object $BaseFile $compFile -IncludeEqual
foreach($data in $diffResult) {
$indicator = $data.SideIndicator
# CompFileに存在し、BaseFileには存在しないデータ
if($indicator -eq "=>") {
echo $data.InputObject
$flg = $true
break
}else {
$flg = $false
}
}
} until ($flg -eq $true)
Start-Sleep -Seconds 2
SeClose $Driver
- 1行目
-
Shell.Applicationクラスの生成
- 2行目
-
NemaSpaceメソッドにより、ダウンロードフォルダのディレクトリパスを取得
- 3行目
-
ダウンロードフォルダ内のPDFファイルを格納
- 4行目
-
ダウンロード前の対象フォルダ内のpdfファイル存在確認
- 6行目
-
URLを指定してChromeブラウザを起動
- 7行目
-
LinkText:"JKAニュース No34"を指定してリンクテキストを取得
- 8行目
-
取得したWeb要素をクリックして、PDFファイルをダウンロード
- 10~25行目
-
ダウンロードが完了するまで、待機実行。Compare-Objectを利用してダウンロードフォルダ内に、ダウンロード対象のPDFファイルが保存されるまで検索をし続ける。
- 27行目
-
2秒待機
- 28行目
-
Chromeブラウザを閉じる
Module
Start-SeChromeのSelenium-Module構文を以下に掲載します。
function Start-SeChrome {
[cmdletbinding(DefaultParameterSetName = 'default')]
[Alias('SeChrome')]
param(
[ValidateURIAttribute()]
[Parameter(Position = 0)]
[string]$StartURL,
[Parameter(Mandatory = $false)]
[array]$Arguments,
[switch]$HideVersionHint,
[System.IO.FileInfo]$DefaultDownloadPath,
[System.IO.FileInfo]$ProfileDirectoryPath,
[Parameter(DontShow)]
[bool]$DisableBuiltInPDFViewer = $true,
[switch]$EnablePDFViewer,
[Alias('PrivateBrowsing')]
[switch]$Incognito,
[parameter(ParameterSetName = 'hl', Mandatory = $true)]
[switch]$Headless,
[parameter(ParameterSetName = 'Min', Mandatory = $true)]
[switch]$Maximized,
[parameter(ParameterSetName = 'Max', Mandatory = $true)]
[switch]$Minimized,
[parameter(ParameterSetName = 'Ful', Mandatory = $true)]
[switch]$Fullscreen,
[switch]$DisableAutomationExtension,
[Alias('ChromeBinaryPath')]
$BinaryPath,
$WebDriverDirectory = $env:ChromeWebDriver,
[switch]$Quiet,
[switch]$AsDefaultDriver,
[int]$ImplicitWait = 10
)
process {
#region chrome set-up options
$Chrome_Options = [OpenQA.Selenium.Chrome.ChromeOptions]::new()
if ($DefaultDownloadPath) {
Write-Verbose "Setting Default Download directory: $DefaultDownloadPath"
$Chrome_Options.AddUserProfilePreference('download', @{'default_directory' = $($DefaultDownloadPath.FullName); 'prompt_for_download' = $false; })
}
if ($ProfileDirectoryPath) {
Write-Verbose "Setting Profile directory: $ProfileDirectoryPath"
$Chrome_Options.AddArgument("user-data-dir=$ProfileDirectoryPath")
}
if ($BinaryPath) {
Write-Verbose "Setting Chrome Binary directory: $BinaryPath"
$Chrome_Options.BinaryLocation = "$BinaryPath"
}
if ($DisableBuiltInPDFViewer -and -not $EnablePDFViewer) {
$Chrome_Options.AddUserProfilePreference('plugins', @{'always_open_pdf_externally' = $true; })
}
if ($Headless) {
$Chrome_Options.AddArguments('headless')
}
if ($Incognito) {
$Chrome_Options.AddArguments('Incognito')
}
if ($Maximized) {
$Chrome_Options.AddArguments('start-maximized')
}
if ($Fullscreen) {
$Chrome_Options.AddArguments('start-fullscreen')
}
if ($DisableAutomationExtension) {
$Chrome_Options.AddAdditionalCapability('useAutomationExtension', $false)
$Chrome_Options.AddExcludedArgument('enable-automation')
}
if ($Arguments) {
foreach ($Argument in $Arguments) {
$Chrome_Options.AddArguments($Argument)
}
}
if (!$HideVersionHint) {
Write-Verbose "Download the right chromedriver from 'http://chromedriver.chromium.org/downloads'"
}
if ($WebDriverDirectory) { $service = [OpenQA.Selenium.Chrome.ChromeDriverService]::CreateDefaultService($WebDriverDirectory) }
elseif ($AssembliesPath) { $service = [OpenQA.Selenium.Chrome.ChromeDriverService]::CreateDefaultService($AssembliesPath) }
else { $service = [OpenQA.Selenium.Chrome.ChromeDriverService]::CreateDefaultService() }
if ($Quiet) { $service.HideCommandPromptWindow = $true }
#endregion
$Driver = [OpenQA.Selenium.Chrome.ChromeDriver]::new($service, $Chrome_Options)
if (-not $Driver) { Write-Warning "Web driver was not created"; return }
#region post creation options
$Driver.Manage().Timeouts().ImplicitWait = [TimeSpan]::FromSeconds($ImplicitWait)
if ($Minimized) {
$Driver.Manage().Window.Minimize();
}
if ($Headless -and $DefaultDownloadPath) {
$HeadlessDownloadParams = [system.collections.generic.dictionary[[System.String], [System.Object]]]::new()
$HeadlessDownloadParams.Add('behavior', 'allow')
$HeadlessDownloadParams.Add('downloadPath', $DefaultDownloadPath.FullName)
$Driver.ExecuteChromeCommand('Page.setDownloadBehavior', $HeadlessDownloadParams)
}
if ($StartURL) { $Driver.Navigate().GoToUrl($StartURL) }
#endregion
if ($AsDefaultDriver) {
if ($Global:SeDriver) { $Global:SeDriver.Dispose() }
$Global:SeDriver = $Driver
}
else { $Driver }
}
}