Color

日々の備忘録

Selenium 4.0 で Google Chrome の検索結果を取得

2023年08月30日 10時46分06秒 | Windows

◆Selenium 4.0 を用いて Google Chrome の検査結果を取得する手順

1.準備
●OS:Windows 10 Pro 64bit Version 22H2
●IDE:Visual Studio Community 2022 Version 17.7.3

2.コンソールアプリケーション

言語:C#

フレームワーク: .NET 6.0

コンソールアプリケーションを✅最上位レベルのステートメント使用しない で作成

3.Nuget

Nuget で Selenium.Support, Selenium.WebDriver を導入

4.chromedriver.exe

ここへアクセス

プラットフォーム win64 をダウンロードして解凍

ソリューションエクスプローラー上で <追加> → <既存の項目> → <実行可能ファイル>

chromedriver.exe を追加、出力ディレクトリにコピー : 常にコピーする

5.ソースコード

  1. using System.Collections.ObjectModel;
  2. using System.Diagnostics;
  3. using System.Threading.Tasks;
  4. using OpenQA.Selenium;
  5. using OpenQA.Selenium.Chrome;
  6. using OpenQA.Selenium.Support.UI;
  7. namespace SeleniumChromeDemo
  8. {
  9.     internal class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             // google chrome を起動
  14.             System.Diagnostics.Process.Start(@"C:\Program Files\Google\Chrome\Application\chrome.exe", " -remote-debugging-port=9222 --user-data-dir=C:\\Temp_ForChromium");
  15.             Thread.Sleep(3000);
  16.             // 検索ワード
  17.             string searchWord = "Selenium4.0 C# Program Sample";
  18.             var options = new ChromeOptions
  19.             {
  20.                 DebuggerAddress = "127.0.0.1:9222"
  21.             };
  22.             using (var driver = new ChromeDriver(options))
  23.             {
  24.                 // 任意のブラウザ操作処理 ↓↓↓
  25.                 var wait = new WebDriverWait(driver, new TimeSpan(0, 0, 15));
  26.                 driver.Url = "https://www.google.com";
  27.                 var q = driver.FindElement(By.Name("q"));
  28.                 wait.Until(d => q.Displayed);
  29.                 q.Clear();
  30.                 q.SendKeys(searchWord);
  31.                 q.Submit();
  32.                 Thread.Sleep(1000);
  33.                 // ざっくり抽出
  34.                 ReadOnlyCollection<IWebElement> _elemnt_class = driver.FindElements(By.ClassName("MjjYud"));
  35.                 if (_elemnt_class.Count > 0)
  36.                 {
  37.                     foreach (IWebElement _e in _elemnt_class)
  38.                     {
  39.                         IWebElement _t;
  40.                         string _u = string.Empty;
  41.                         string _tx = string.Empty;
  42.                         try
  43.                         {
  44.                             _t = _e.FindElement(By.TagName("a")).FindElement(By.TagName("h3"));
  45.                             _tx = _t.Text;
  46.                         }
  47.                         catch
  48.                         {
  49.                             ;
  50.                         }
  51.                         try
  52.                         {
  53.                             _u = _e.FindElement(By.TagName("a")).GetAttribute("href");
  54.                         }
  55.                         catch
  56.                         {
  57.                             ;
  58.                         }
  59.                         // 検索された URL
  60.                         Console.WriteLine($"URL : {_tx}:{_u}");
  61.                     }
  62.                 }
  63.                 // 記事の抽出
  64.                 ReadOnlyCollection<IWebElement> _txt = driver.FindElements(By.XPath("//div[@data-sncf='1']"));
  65.                 if (_txt.Count > 0)
  66.                 {
  67.                     string _tt = string.Empty;
  68.                     foreach (IWebElement _e in _txt)
  69.                     {
  70.                         try
  71.                         {
  72.                             _tt = _e.Text;
  73.                             // 検索された記事
  74.                             Console.WriteLine($"Text : {_tt}");
  75.                         }
  76.                         catch
  77.                         {
  78.                             ;
  79.                         }
  80.                     }
  81.                 }
  82.             }
  83.         }
  84.     }
  85. }

6.実行

URL と 記事の一部が取得できる

─以上─