diff --git a/opengoogle.ps1 b/opengoogle.ps1 new file mode 100644 index 0000000..b16ba32 --- /dev/null +++ b/opengoogle.ps1 @@ -0,0 +1,60 @@ +# 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 +