728x90
private void Checkinfo_Button_Click(object sender, EventArgs e)
{
//MessageBox.Show("Hello World!");
MessageBox.Show("INPUT INFO \n ID : " + IdText.Text + " PASSWORD : " + PassText.Text
+ "\n attend start : " + workStartT1.Text+" attend end : " + workStartT2.Text
+ "\n leave start : " + offWorkT1.Text +" leave end : " + offWorkT2.Text
+ "\n 비밀번호는 로그, 저장자료에 기록되지 않습니다."
, "입력정보 확인"
);
//Console.WriteLine("INPUT INFO \n ID : {0} \n ", IdText.Text
// + "\n attend start : " + workStartT1.Text + " attend end : " + workStartT2.Text
// + "\n leave start : " + offWorkT1.Text + " leave end : " + offWorkT2.Text);
Log_Info("INPUT INFO | ID : " + IdText.Text
+ " | attend start : " + workStartT1.Text + " | attend end : " + workStartT2.Text
+ " | leave start : " + offWorkT1.Text + " | leave end : " + offWorkT2.Text);
Properties.Settings.Default.userIdSetValue = IdText.Text;
Properties.Settings.Default.workStartT1SetValue = workStartT1.Text;
Properties.Settings.Default.workStartT2SetValue = workStartT2.Text;
Properties.Settings.Default.offWorkT1SetValue = offWorkT1.Text;
Properties.Settings.Default.offWorkT2SetValue = offWorkT2.Text;
Properties.Settings.Default.onOffTimesettingSetValue = onOffTimesetting.Text;
Properties.Settings.Default.Save();
}
private void RemovePlaceholder(object sender, EventArgs e)
{
// C# placeholder 참조사이트
//https://ella-devblog.tistory.com/70
TextBox txt = (TextBox)sender;
if (txt.Text == IdPlaceholder | txt.Text == PwPlaceholder)
{ //텍스트박스 내용이 사용자가 입력한 값이 아닌 Placeholder일 경우에만, 커서 포커스일때 빈칸으로 만들기
txt.ForeColor = Color.Black; //사용자 입력 진한 글씨
txt.Text = string.Empty;
if (txt == PassText) PassText.PasswordChar = '●';
}
}
private void SetPlaceholder(object sender, EventArgs e)
{
// C# placeholder 참조사이트
//https://ella-devblog.tistory.com/70
TextBox txt = (TextBox)sender;
if (string.IsNullOrWhiteSpace(txt.Text))
{
//사용자 입력값이 하나도 없는 경우에 포커스 잃으면 Placeholder 적용해주기
txt.ForeColor = Color.DarkGray; //Placeholder 흐린 글씨
if (txt == IdText)
txt.Text = IdPlaceholder;
else if (txt == PassText)
{
txt.Text = PwPlaceholder;
PassText.PasswordChar = default;
}
}
}
private void login_button_Clicked(object sender, EventArgs e)
{
if (!isInfoReady())
{
return;
}
Log_Info("로그인 시작");
string id = IdText.Text;
string pw = PassText.Text;
firstInit();
int size = chromeList.Count;
var _driver = chromeList[size - 1];
if ( _driver == null)
{
Log_Info("web List의 마지막에서 가져온 driver의 객체가 비었음.");
return;
}
var inputID = _driver.FindElementByXPath("X-PATH");
inputID.SendKeys( id );
var InputPW = _driver.FindElementByXPath("X-PATH");
InputPW.SendKeys( pw );
var LoginButton = _driver.FindElementByXPath("X-PATH");
LoginButton.Click();
}
private void login_after_Clicked(object sender, EventArgs e)
{
if (!isInfoReady())
{
return;
}
Log_Info("로그인후 근태탭으로 이동");
login_button_Clicked(sender, e);
int size = chromeList.Count;
var _driver = chromeList[size - 1];
if (_driver == null)
{
Log_Info("web List의 마지막에서 가져온 driver의 객체가 비었음.");
return;
}
var goToAttend = _driver.FindElementById("DIV_ID");
goToAttend.Click();
var closeAlram = _driver.FindElementByXPath("X-PATH");
if(closeAlram != null)
{
closeAlram.Click();
}
}
private void work_button_Click(object sender, EventArgs e)
{
if (!isInfoReady())
{
return;
}
DateTime nowDt = DateTime.Now;
if (nowDt.DayOfWeek == DayOfWeek.Saturday)
{
MessageBox.Show("오늘은 토요일. 회사 안옴 스킵. 수고.");
Log_Info("오늘은 토요일. 회사 안옴 스킵. 수고.");
return;
}
else if (nowDt.DayOfWeek == DayOfWeek.Sunday)
{
MessageBox.Show("오늘은 일요일. 회사 안옴 스킵. 수고.");
Log_Info("오늘은 일요일. 회사 안옴 스킵. 수고.");
return;
}
Log_Info("로그인후 출근버튼 클릭하기");
login_after_Clicked(sender, e);
Thread.Sleep(1000);
int size = chromeList.Count;
var _driver = chromeList[size - 1];
if (_driver == null)
{
Log_Info("web List의 마지막에서 가져온 driver의 객체가 비었음.");
return;
}
try
{
var attendButton = _driver.FindElementByXPath("X-PATH");
attendButton.Click();
}
catch (Exception error)
{
Log_Info("출근 버튼을 눌렀을때 오류 | Error log : " + error.Message );
return;
}
/*
try
{
var attendButtonClass = _driver.FindElementByCssSelector("CSS_ID");
attendButtonClass.Click();
}
catch (Exception error)
{
Log_Info("출근 버튼을 눌렀을때 오류 | Error log : " + error.Message );
return;
}
*/
var popupButton = _driver.FindElementByXPath("X-PATH");
popupButton.Click();
Thread.Sleep(1000);
this.Work = true;
closeAllChrome();
}
private void off_work_button_Click(object sender, EventArgs e)
{
if (!isInfoReady())
{
return;
}
//MessageBox.Show("button5_Click");
DateTime nowDt = DateTime.Now;
if (nowDt.DayOfWeek == DayOfWeek.Saturday)
{
MessageBox.Show("오늘은 토요일. 회사 안옴 스킵. 수고.");
Log_Info("오늘은 토요일. 회사 안옴 스킵. 수고.");
return;
}
else if (nowDt.DayOfWeek == DayOfWeek.Sunday)
{
MessageBox.Show("오늘은 일요일. 회사 안옴 스킵. 수고.");
Log_Info("오늘은 일요일. 회사 안옴 스킵. 수고.");
return;
}
Log_Info("로그인후 퇴근버튼 클릭하기");
login_after_Clicked(sender, e);
int size = chromeList.Count;
var _driver = chromeList[size - 1];
if (_driver == null)
{
Log_Info("web List의 마지막에서 가져온 driver의 객체가 비었음.");
return;
}
try
{
var attendButton = _driver.FindElementByXPath("X-PATH");
attendButton.Click();
}
catch (Exception error)
{
Log_Info("퇴근 버튼을 눌렀을때 생기는 오류 | Error log : " + error.Message);
return;
}
var popupButton = _driver.FindElementByXPath("X-PATH");
popupButton.Click();
Thread.Sleep(1000);
this.offWork = true;
closeAllChrome();
}
private void AutoAttendanceStopButton_Click(object sender, EventArgs e)
{
this.AutoAttendanceStartButton.UseVisualStyleBackColor = true;
AutoAttendanceStartButton.Text = "자동 출퇴근 시작버튼";
settingStartWorkTime.Text = "--";
settingEndWorkTime.Text = "--";
attendenceLabelText.Text = "--";
offWorkLabelText.Text = "--";
isAutoRunning.Text = "실행중지됨";
this.While = false;
}
private void autoAttendance_button_Click(object sender, EventArgs e)
{
if(!isInfoReady())
{
return;
}
AutoAttendanceStartButton.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(128)))));
AutoAttendanceStartButton.Text = "자동 출퇴근 실행중";
// 시작시간 범위 갖고와서 시간객체로변환
// 자정 또는 프로그램이 켜진 시점에서
// 랜덤으로 출근시간, 퇴근시간을 뽑음
// 뽑힌 출퇴근 시간과 시간객체로 변환된
// 시간 범위내라면 해당 시간에 버튼을 클릭하게함.
// 매 자정마다 초기화같은걸 생각해서
// 출퇴근 시간 세팅을 메소드로 따로 빼서
// 모듈화
Log_Info("자동 출퇴근 버튼 클릭");
isAutoRunning.Text = "실행중";
this.startRandomTime = setStartWorkTime();
this.endRandomTime = setEndWorkTime();
this.While = true;
// int to date 참조사이트
//https://codewithshadman.com/csharp-number-and-datetime-tips/
this.sender = sender;
this.e = e;
// 이부분 스레드로 돌리면 될듯
//------------------------------------------------------------
// 인자값 넘기는것 때문에 스레드로 돌리는건 따로 더 찾아봐야할듯.
Thread thr = new Thread(new ThreadStart(tryAttendanceWhile) );
Thread thr2 = new Thread(new ThreadStart(initTime));
thr.Start();
thr2.Start();
//------------------------------------------------------------
}
몇번 적고나니 생각해보게 된 건데
티스토리에서 소스코드형식을 지원하지만
내부 변수및 메소드명에 대한 구분을 위한 색 보정은 없는것같다.
알아서 잘 봐야할 것 같다.
C#을 하면서 놀라면서도 편했던게 var라는 임시 변수와
메소드를 인자값으로 넘겨줄 수 있는 대리자라는게 존재했었다는것 이다.
그동안 자바에서는 꼭 객체 타입을 맞게 새로운 객체를 가져다 썼어야 했고
같은 객체나 클래스내에 있는 메소드가 아니지만 굳이 한번은 써야할때,
새로 쓰려면 객체 생성해야하고,
생성자의 인자값이 필요하다면 인자값을 다 일일이 입력해주고 나서야
메소드를 사용할 수 있었는데, 너무나도 간편하게 사용할 수 있어서 놀랐다.
물론 간편한만큼 추상적이고, 추상적인만큼 사용할때 조심해야 하지만
커다란 프로젝트도 아니고 간단하게 만든 토이 프로젝트인만큼
새로운걸 경험해보자는 목적은 달성할 수 있었다.
가독성을 위해서 그림과 소스에 대한 자세한 설명은 다음글에서 할 수 있도록 할 예정이다.
정말 새삼스럽게 느낀거지만
글을 읽을 수 있어 글로만 적는 것과
적는사람이 정말 힘들고 복잡하지만 소스와 그림을 보며 적어놓은 것에 대한 가독성의 차이는 상상을 초월하더라
이를 느꼈기때문에 바쁘지 않다면 귀차니즘을 이겨내고 적을수 있도록 할 예정이다.
728x90
'Programming > C#' 카테고리의 다른 글
C# 셀레니움 - 웹기반 출근퇴근 자동으로 하기 - 1 텍스트 박스 설정 (0) | 2021.05.24 |
---|---|
C# 셀레니움 - 웹기반 출근퇴근 자동으로 하기 - intro (0) | 2021.05.21 |
댓글