Newer
Older
selenium_opengoogle_parallel / opengoogle.ps1
# Selenium WebDriver のライブラリを読み込み
Add-Type -Path "C:\Users\Syuji\.nuget\packages\selenium.webdriver\4.35.0\lib\netstandard2.0\WebDriver.dll"
Add-Type -Path "C:\Users\Syuji\.nuget\packages\selenium.support\4.35.0\lib\netstandard2.0\WebDriver.Support.dll"

# EdgeDriver のパスを指定
$edgeDriverPath = "E:\tool\edgedriver_win64\msedgedriver.exe"

## 非同期・多重化: 複数の InPrivate ウィンドウで独立検索
# 最大起動数とキーワードを設定
$maxSessions = 3           # 必要に応じて変更
$keyword     = "Selenium"  # 入力する検索語
$holdSeconds = 5           # 検索結果を表示したまま待つ秒数(0で即終了)

$jobs = @()
for ($i = 1; $i -le $maxSessions; $i++) {
    $jobs += Start-Job -Name "GoogleSearch_$i" -ScriptBlock {
        param($driverPath, $kw, $hold)

        # 各ジョブ内で Selenium DLL を読み込み(ジョブは別セッションのため)
        Add-Type -Path "C:\Users\Syuji\.nuget\packages\selenium.webdriver\4.35.0\lib\netstandard2.0\WebDriver.dll"
        Add-Type -Path "C:\Users\Syuji\.nuget\packages\selenium.support\4.35.0\lib\netstandard2.0\WebDriver.Support.dll"

        $opts = New-Object OpenQA.Selenium.Edge.EdgeOptions
        $opts.UseChromium = $true
        $opts.AddArgument("start-maximized")
        $opts.AddArgument("inprivate")

        $dir = Split-Path -Path $driverPath -Parent
        $drv = New-Object OpenQA.Selenium.Edge.EdgeDriver($dir, $opts)

        try {
            $drv.Manage().Timeouts().ImplicitWait = [TimeSpan]::FromSeconds(10)
            $drv.Navigate().GoToUrl("https://www.google.com")

            $box = $drv.FindElement([OpenQA.Selenium.By]::Name("q"))
            $box.Clear()
            $box.SendKeys($kw)
            Start-Sleep -Milliseconds 300

            $btns = $drv.FindElements([OpenQA.Selenium.By]::Name("btnK"))
            $btn = $null
            foreach ($b in $btns) { if ($b.Displayed -and $b.Enabled) { $btn = $b; break } }

            if ($btn) { $btn.Click() } else { $box.SendKeys([OpenQA.Selenium.Keys]::Enter) }

            if ($hold -gt 0) { Start-Sleep -Seconds $hold }
        }
        finally {
            # 結果を見続けたい場合は次行をコメントアウト
            $drv.Quit()
        }
    } -ArgumentList $edgeDriverPath, $keyword, $holdSeconds

    # 立ち上げタイミングを少しずらす
    Start-Sleep -Milliseconds 200
}

# 非同期実行のままスクリプトを終える(待機したい場合は以下を有効化)
# Wait-Job -Job $jobs | Receive-Job