728x90
반응형
1. Chrome Version 확인
private static string GetChromeVersion()
{
// Note: Chrome must be installed in the default location
string keyPath = @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe";
string result = null;
using (RegistryKey key = Registry.LocalMachine.OpenSubKey(keyPath))
{
if (key == null)
{
MessageBox.Show("Chrome 브라우저가 설치되어 있지 않거나, 기본 경로 설치 경로가 아닙니다.\nChrome 브라우저를 재설치 해주세요.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
Application.ExitThread();
}
object executablePath = null;
if (key != null) { executablePath = key.GetValue(""); }
if (executablePath == null)
{
MessageBox.Show("Chrome 브라우저가 설치되어 있지 않거나, 기본 경로 설치 경로가 아닙니다.\nChrome 브라우저를 재설치 해주세요.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
Application.ExitThread();
}
else
{
FileVersionInfo versionInfo = FileVersionInfo.GetVersionInfo(executablePath.ToString());
result = versionInfo.FileVersion;
}
}
return result;
}
2. Selenium Driver 버전 확인
private static string GetSeleniumVersion()
{
string driverPath = Path.Combine(Setting.CurrentDirectory, "chromedriver.exe");
string result = null;
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = driverPath,
Arguments = "--version",
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true
};
Process process = new Process
{
StartInfo = startInfo
};
process.Start();
while (!process.StandardOutput.EndOfStream)
{
result = process.StandardOutput.ReadLine();
}
process.WaitForExit();
string pattern = @"(?<=ChromeDriver )(.*?)(?= \()";
Match match = Regex.Match(result, pattern);
if (match.Success)
{
result = match.Value;
}
return result;
}
3. 버전 비교 및 업데이트
public static void Download_SeleniumDriver()
{
var client = new WebClient();
string zipFilePath = Path.Combine(Setting.CurrentDirectory, "chromedriver_win32.zip");
string exeFilePath = Path.Combine(Setting.CurrentDirectory, "chromedriver.exe");
string LICENSE_iFilePath = Path.Combine(Setting.CurrentDirectory, "LICENSE.chromedriver");
string majorVersion = null;
string latest_chromedriver = null;
string downloadUrl = null;
string chromeVersion = GetChromeVersion();
if (chromeVersion == null) { Application.ExitThread(); }
else
{
majorVersion = chromeVersion.Substring(0, chromeVersion.LastIndexOf('.'));
latest_chromedriver = Web.Gethtml($"https://chromedriver.storage.googleapis.com/LATEST_RELEASE_{majorVersion}");
downloadUrl = $"https://chromedriver.storage.googleapis.com/{latest_chromedriver}/chromedriver_win32.zip";
if (!File.Exists(exeFilePath))
{
try
{
client.DownloadFile(downloadUrl, zipFilePath);
ZipFile.ExtractToDirectory(zipFilePath, Setting.CurrentDirectory);
}
catch
{
if (File.Exists(zipFilePath)) { File.Delete(zipFilePath); }
if (File.Exists(LICENSE_iFilePath)) { File.Delete(LICENSE_iFilePath); }
MessageBox.Show("Chromedriver를 정상 다운로드 할 수 없습니다.\n인터넷 연결 확인 후 재실행하거나 직접 다운로드가 필요합니다.\n프로그램 재실행 이후에도 지속적인 문제가 발생할 경우 개발자게에 문의주세요.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
string seleniumVersion = GetSeleniumVersion();
if (seleniumVersion != latest_chromedriver)
{
try
{
client.DownloadFile(downloadUrl, zipFilePath);
using (var archive = ZipFile.OpenRead(zipFilePath))
{
foreach (var entry in archive.Entries)
{
string entryPath = Path.Combine(Setting.CurrentDirectory, entry.FullName);
if (File.Exists(entryPath))
File.Delete(entryPath);
entry.ExtractToFile(entryPath);
}
}
}
catch
{
if (File.Exists(zipFilePath)) { File.Delete(zipFilePath); }
if (File.Exists(LICENSE_iFilePath)) { File.Delete(LICENSE_iFilePath); }
MessageBox.Show("Chromedriver를 정상 다운로드 할 수 없습니다.\n인터넷 연결 확인 후 재실행하거나 직접 다운로드가 필요합니다.\n프로그램 재실행 이후에도 지속적인 문제가 발생할 경우 개발자게에 문의주세요.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
if (File.Exists(zipFilePath)) { File.Delete(zipFilePath); }
if (File.Exists(LICENSE_iFilePath)) { File.Delete(LICENSE_iFilePath); }
}
728x90
반응형
'공부 > Programming' 카테고리의 다른 글
Python으로 APK 디코드하고 권한 추출하기 (1) | 2024.11.19 |
---|---|
Python gspread로 구글 시트(Google Sheet) 연동하기 (1) | 2024.11.15 |
Python: WEBP to JPG/PNG - WEBP 확장자를 JPG/PNG로! (0) | 2024.11.13 |
[C#] C# Selenium Crawling / C# 크롤링 (0) | 2021.02.17 |