using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
using SeleniumExtras.WaitHelpers;
namespace TestProject
{
/// <summary>
/// 메인 폼
/// </summary>
public partial class MainForm : Form
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 크롬 드라이버 서비스
/// </summary>
private ChromeDriverService driverService = null;
/// <summary>
/// 크롬 옵션
/// </summary>
private ChromeOptions options = null;
/// <summary>
/// 크롬 드라이버
/// </summary>
private ChromeDriver driver = null;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainForm()
/// <summary>
/// 생성자
/// </summary>
public MainForm()
{
InitializeComponent();
FormClosing += Form_FormClosing;
this.showButton.Click += showButton_Click;
this.autoNavigateButton.Click += autoNavigateButton_Click;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 폼을 닫을 경우 처리하기 - Form_FormClosing(sender, e)
/// <summary>
/// 폼을 닫을 경우 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void Form_FormClosing(object sender, FormClosingEventArgs e)
{
if(this.driver != null)
{
this.driver.Quit();
this.driver = null;
}
}
#endregion
#region 크롬 브라우저 표시 버튼 클릭시 처리하기 - showButton_Click(sender, e)
/// <summary>
/// 크롬 브라우저 표시 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void showButton_Click(object sender, EventArgs e)
{
if(this.driverService == null)
{
this.driverService = ChromeDriverService.CreateDefaultService();
this.driverService.HideCommandPromptWindow = true;
}
if(this.options == null)
{
this.options = new ChromeOptions();
this.options.AddArgument("--start-maximized");
this.options.AddArgument("ignore-certificate-errors");
//this.options.AddArgument("--disable-gpu");
string userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36";
this.options.AddArgument($"user-agent={userAgent}");
this.options.AddArgument("incognito");
this.options.AddExcludedArgument("enable-automation");
}
this.driver = new ChromeDriver(this.driverService, this.options);
}
#endregion
#region 자동 탐색 버튼 클릭시 처리하기 - autoNavigateButton_Click(sender, e)
/// <summary>
/// 자동 탐색 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void autoNavigateButton_Click(object sender, EventArgs e)
{
string urlList = this.urlListTextBox.Text.Trim();
if(string.IsNullOrEmpty(urlList))
{
MessageBox.Show(this, "URL 목록이 없습니다.", "INFORMATION", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.urlListTextBox.SelectAll();
this.urlListTextBox.Focus();
return;
}
if(this.driver == null)
{
MessageBox.Show(this, "크롬 드라이버가 생성되지 않았습니다.", "INFORMATION", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
INavigation navigation = this.driver.Navigate();
string[] urlArray = urlList.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
foreach(string url in urlArray)
{
if(string.IsNullOrWhiteSpace(url))
{
continue;
}
navigation.GoToUrl(url);
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until(ExpectedConditions.ElementIsVisible(By.XPath("/html/body")));
Thread.Sleep(3000);
}
}
#endregion
}
}