はじめに
TinySeleniumVBA (ExcelでWebスクレイピングするツール) を使用しているユーザーから環境を変更したら動作しなくなったとのコメントがありました。
他にも AutoIt (Windows用プログラムのGUI自動操作機能)でも問題が発生しているようです。
【2024/12/28追記】
他にも、Laravel の旧バージョンでも問題が発生しているようです。
原因
2024/08/22のChromeDriver(EdgeDriver)のVer.128からデフォルトポート9515がランダムに変更されたことによるものです。
TinySeleniumVBA では固定ポート指定をしていないため、デフォルトポート9515を前提として動作するようになっていたため、ポート不一致でエラーになっていました。
Fix TCP port race in ChromeDriver
Before this commit ChromeDriver used the default port number 9515 if the
server port was not provided explicitly via the command line. If user
needed to create several ChromeDriver instances the port number had to
be provided explicitly. This created a problem: user had to find a free
port, pass it to ChromeDriver and hope that the port won't be stolen by
another process in between.
This commit enables ChromeDriver to search for the available server port
if it was not specified explicitly or if the port argument was specified
as 0 (zero). This solves the problem of TCP port race.
https://chromium.googlesource.com/chromium/src/+/6f33d75f071e322c4a3e49b0a4ac2022e5b6cada
ChromeDriverのTCPポートレースを修正
今回のコミット以前は、ChromeDriverはサーバーポートがコマンドラインで明示的に提供されない場合、デフォルトのポート番号9515を使用していました。
複数のChromeDriverインスタンスを作成する必要がある場合、ポート番号を明示的に指定する必要がありました。
このため、ユーザーは空いているポートを探してChromeDriverに渡し、その間に他のプロセスにポートが盗まれないことを祈らなければならないという問題があった。
このコミットにより、明示的に指定されていない場合、またはポート引数に0(ゼロ)が指定されている場合に、ChromeDriverが利用可能なサーバーポートを検索できるようになった。
これにより、TCPポート競合の問題が解決される。
暫定対応
ポート番号を明示的に指定するよう「" --port=9515"」を追加
' Launch Edge Driver
Public Sub Edge(ByVal driverPath As String, Optional ByVal driverUrl As String = "http://localhost:9515")
start driverPath & " --port=9515", driverUrl, "MicrosoftEdge"
End Sub
' Launch Chrome Driver
Public Sub Chrome(ByVal driverPath As String, Optional ByVal driverUrl As String = "http://localhost:9515")
start driverPath & " --port=9515", driverUrl, "chrome"
End Sub
最後に
タイトルに記載すれば検索に引っ掛かりやすくなると思うので書いてみました。