Windows 10 + C# + selenium で headless edge(Chromium) を試してみる

# 目的
Edge(Chromium)をC\# + selenium からキックしてみる
※Selenium4 はこちら [Windows 10 + C# + Selenium4 で Chrome と Edge を headlessで起動してみる](https://qiita.com/tabizou/items/ea69da65759f1d5f82d6)
OpenQA.Selenium.Chrome; を使用する版と使用しない版の２typeを試す
OpenQA.Selenium.Support.UI.ExpectedConditions method is now deprecatedに対しては
SeleniumExtras.WaitHelpers.ExpectedConditionsで書き換えて対応してみる
※サイトの作成された時期によって修正の量が違うと思われる・・・・
PythonでのWebDriverWaitは

```python
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.TagName, 'h3'))
    )
```
を書き換えると以下になるのかいな？？

```cs
    WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));            
    IWebElement firstResult = wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementExists(By.TagName("h3")));
```
## 追加パッケージ
.NETFramework 4.5でプロジェクトを作成後
プロジェクト -> NuGetパッケージの管理より以下を追加する

<pre>
DotNetSeleniumExtras.WaitHelpers
Selenium.WebDriver
Microsoft.Edge.SeleniumTools
</pre>
## サンプルコード
[Seleniumブラウザー自動化プロジェクト](https://www.selenium.dev/docs/site/ja/)のCS版を書き換えてみる

```cs
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
using SeleniumExtras.WaitHelpers;
using Microsoft.Edge.SeleniumTools;

//
// OpenQA.Selenium.Chrome; を使用する版
//
private void btnEdge_Click(object sender, EventArgs e)
{
    var options = new EdgeOptions();
    options.UseChromium = true;
    //options.AddArgument("headless");
    options.AddArgument("disable-gpu");
    options.BinaryLocation = @"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe";

    var service = ChromeDriverService.CreateDefaultService(@"C:\Dev\code\vs2019\scraping\Edge0001\Edge0001", "msedgedriver.exe");
    IWebDriver driver = new EdgeDriver(options);

    try
    {
        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));

        //Webページを開く
        driver.Navigate().GoToUrl("https://www.google.co.jp");

        //検索ボックスに検索ワードを入力
        IWebElement el = wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementExists(By.Name("q")));
        driver.FindElement(By.Name("q")).SendKeys("Selenium" + OpenQA.Selenium.Keys.Enter);

        //検索結果が出たという判定を何にするか??　は仕様依存??
        IWebElement elm = wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementExists(By.TagName("h3")));

        //ページソースの出力
        Console.WriteLine(driver.PageSource);
    }
    catch (Exception)
    {
        Console.WriteLine("Err");
    }
    finally
    {
        if (driver != null)
        {
            driver.Quit();
        }
    }
}

//
// using OpenQA.Selenium.Chrome; を使用しない版
//
private void btnEdgeTool_Click(object sender, EventArgs e)
{
    var options = new EdgeOptions();
    options.AddArgument("headless");
    options.AddArgument("disable-gpu");
    options.BinaryLocation = @"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe";

    var service = EdgeDriverService.CreateDefaultService(@"C:\Dev\code\vs2019\scraping\Edge0001\Edge0001", "msedgedriver.exe");
    IWebDriver driver = new EdgeDriver(service, options);

    try
    {
        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));

        //Webページを開く
        driver.Navigate().GoToUrl("https://www.google.co.jp");

        //検索ボックスに検索ワードを入力
        IWebElement el = wait.Until(ExpectedConditions.ElementExists(By.Name("q")));
        driver.FindElement(By.Name("q")).SendKeys("Selenium" + OpenQA.Selenium.Keys.Enter);

        //検索結果が出たという判定を何にするか?? は仕様依存??
        IWebElement elm = wait.Until(ExpectedConditions.ElementExists(By.TagName("h3")));

        //ページソースの出力
        Console.WriteLine(driver.PageSource);
    }
    catch (Exception)
    {
        Console.WriteLine("Err");
    }
    finally
    {
        if (driver != null)
        {
            driver.Quit();
        }
    }
}
```
# 参考にしたのは以下のサイト
[Seleniumブラウザー自動化プロジェクト](https://www.selenium.dev/docs/site/ja/)
[C# Selenium 'ExpectedConditions is obsolete'](https://stackoverflow.com/questions/49866334/c-sharp-selenium-expectedconditions-is-obsolete)
[Selenium Web Driver, ExpectedConditions [deprecated] alternative](https://sqa.stackexchange.com/questions/37250/selenium-web-driver-expectedconditions-deprecated-alternative)
[seleniumを使ってC#でGoogle Chromeの自動操作をする](https://qiita.com/natuki33/items/c0947c31fc733b4e39ef)
[【C#】Selenium ChromeDriverを使ってWebスクレイピング](https://gazee.net/develop/csharp-selenium-chrome-driver/)