LoginSignup
0
1

More than 1 year has passed since last update.

Windows 10 + C# + Selenium4 で Chrome と Edge を headlessで起動してみる

Last updated at Posted at 2022-06-29

目的

C# + Selenium4は以下との変更部分が多そうなので、メモっておく
Windows 10 + C# + selenium で headless chrome を試してみる
Windows 10 + C# + selenium で headless edge(Chromium) を試してみる

ドキュメント/WebDriver/待機の実装例としては以下の2案が考えられる?(でいいのか??)

# 案1
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement firstResult = wait.Until(e => e.FindElement(By.XPath("//*[@id='sb_privacy']")));
# 案2
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10))
    .Until(ExpectedConditions.ElementExists(By.XPath("//*[@id='sb_privacy']")));

追加パッケージ

VS2022 .NET6でプロジェクトを作成後
プロジェクト -> NuGetパッケージの管理より以下を追加する(作成日のバージョン)

Selenium.WebDriver(4.3.0)
Selenium.Support(4.3.0)
SeleniumExtras.WaitHelpers(1.0.2)

サンプルコード

using OpenQA.Selenium;
using OpenQA.Selenium.Edge;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
using SeleniumExtras.WaitHelpers;
using System.Diagnostics;

//
// Edge版
//
private void btnEdge_Click(object sender, EventArgs e)
{
    var service = EdgeDriverService.CreateDefaultService();
    service.UseVerboseLogging = true;

    var options = new EdgeOptions();
    options.AddArgument("headless");    // headless

    var driver = new EdgeDriver(service, options);

    try
    {
        driver.Url = "https://bing.com";

        driver.FindElement(By.Id("sb_form_q")).SendKeys("WebDriver" + OpenQA.Selenium.Keys.Enter);

        // 下部の[プライバシーと Cookie]を確認
        //  案1
        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
        IWebElement firstResult = wait.Until(e => e.FindElement(By.XPath("//*[@id='sb_privacy']")));

        //  案2
        var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10))
                .Until(ExpectedConditions.ElementExists(By.XPath("//*[@id='sb_privacy']")));

        //ページソースの出力
        Debug.WriteLine(driver.PageSource);

        Thread.Sleep(5000);
    }
    finally
    {
        driver.Quit();
    }
}

//
// Chrome版
//
private void btnChrome_Click(object sender, EventArgs e)
{
    var service = ChromeDriverService.CreateDefaultService();
    //service.UseVerboseLogging = true;

    var options = new ChromeOptions();
    options.AddArgument("headless");    // headless

    var driver = new ChromeDriver(service, options);

    try
    {
        driver.Url = "https://bing.com";

        driver.FindElement(By.Id("sb_form_q")).SendKeys("WebDriver" + OpenQA.Selenium.Keys.Enter);

        // 検索結果下部の[プライバシーと Cookie]を確認
        //  案1
        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
        IWebElement firstResult = wait.Until(e => e.FindElement(By.XPath("//*[@id='sb_privacy']")));

        //  案2
        var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10))
                .Until(ExpectedConditions.ElementExists(By.XPath("//*[@id='sb_privacy']")));

        Thread.Sleep(5000);
    }
    finally
    {
        driver.Quit();
    }
}

参考にしたのは以下のサイト

Seleniumブラウザー自動化プロジェクト
WebDriver を使用して Microsoft Edge を自動化する
TimeSpan.ToString メソッド
Windows 10 + C# + selenium で headless chrome を試してみる
Windows 10 + C# + selenium で headless edge(Chromium) を試してみる

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1