目的
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) を試してみる