追記
Selenium 4.6以降Selenium自身にドライバDL機能が含まれています。
Selenium Manager (Beta) | Selenium
[.NET] Selenium に純正の WebDriver Manager が付属するようになった話 : @jsakamoto
2021/9/1 追記
別質問で言及されてしまったので、現在の方法を書いておきます(すごく簡単になっています)
C# - C# WebDriverManagerで、今インストールされてるEdgeのバージョンに合わせてEdgeDriverをセットアップする|teratail
回答当時はWebDriverManager 2.7.0
でしたが、今は2.11.3
とだいぶバージョンが上がっています。
NuGet Gallery | WebDriverManager 2.11.3
GitHubにすべて書いてありますが、SetUpDriver
でVersionResolveStrategy.MatchingBrowser
オプションをつけるだけで終了です。
rosolko/WebDriverManager.Net: Automatic Selenium Webdriver binaries management for .Net
cs
1 using OpenQA . Selenium . Chrome ;
2 using System ;
3 using WebDriverManager ;
4 using WebDriverManager . DriverConfigs . Impl ;
5 using WebDriverManager . Helpers ;
6
7 namespace Questions227899
8 {
9 class Program
10 {
11 static void Main ( )
12 {
13 Console . WriteLine ( "ChromeDriverを取得中" ) ;
14
15 // 最新版
16 //new DriverManager().SetUpDriver(new ChromeConfig());
17
18 // インストールされているバージョン
19 new DriverManager ( ) . SetUpDriver ( new ChromeConfig ( ) , VersionResolveStrategy . MatchingBrowser ) ;
20
21 Console . WriteLine ( "ChromeDriverを取得終了" ) ;
22
23 var chrome = new ChromeDriver ( ) ;
24 chrome . Navigate ( ) . GoToUrl ( "https://teratail.com/" ) ;
25 }
26 }
27 }
以下古い内容
NuGetはSelenium.WebDriver
WebDriverManager
の2つだけの状態で、
Chromeが常に最新版であれば、
cs
1 using System ;
2 using OpenQA . Selenium . Chrome ;
3 using WebDriverManager ;
4 using WebDriverManager . DriverConfigs . Impl ;
5
6 namespace Questions227899
7 {
8 class Program
9 {
10 static void Main ( )
11 {
12 Console . WriteLine ( "ChromeDriverを取得中" ) ;
13 new DriverManager ( ) . SetUpDriver ( new ChromeConfig ( ) ) ;
14 Console . WriteLine ( "ChromeDriverを取得終了" ) ;
15
16 var chrome = new ChromeDriver ( ) ;
17 chrome . Navigate ( ) . GoToUrl ( "https://teratail.com/" ) ;
18 }
19 }
20 }
これで取れました。
今インストールされてるChromeに合わせる場合、
cs
1 using System ;
2 using System . Diagnostics ;
3 using System . Net . Http ;
4 using System . Threading . Tasks ;
5 using Microsoft . Win32 ;
6 using OpenQA . Selenium . Chrome ;
7 using WebDriverManager ;
8 using WebDriverManager . DriverConfigs . Impl ;
9
10 namespace Questions227899
11 {
12 class Program
13 {
14 static async Task Main ( )
15 {
16 Console . WriteLine ( "ChromeDriverを取得中" ) ;
17 var version = await GetChromeDriverVersionAsync ( ) ;
18 new DriverManager ( ) . SetUpDriver ( new ChromeConfig ( ) , version ) ;
19 Console . WriteLine ( "ChromeDriverを取得終了" ) ;
20
21 var chrome = new ChromeDriver ( ) ;
22 chrome . Navigate ( ) . GoToUrl ( "https://teratail.com/" ) ;
23
24
25 Task < string > GetChromeDriverVersionAsync ( )
26 {
27 var path = Registry . GetValue ( @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe" , "" , null ) ;
28 if ( path == null )
29 path = Registry . GetValue ( @"HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe" , "" , null ) ;
30 // インストールされているChromeのバージョン
31 var v = FileVersionInfo . GetVersionInfo ( path . ToString ( ) ) . FileVersion ;
32
33 v = v . Substring ( 0 , v . LastIndexOf ( "." ) ) ;
34 var url = "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_" + v ;
35 // 対応するChromeDriverのバージョン
36 return new HttpClient ( ) . GetStringAsync ( url ) ;
37 }
38 }
39 }
40 }
こんな感じでしょうか(雑いです)