보통 웹 크롤링 또는 자동화를 하면 파이썬으로 많이 하는데 나는 C#으로 개발을 했다.
Selenium이라는 것을 많이 쓰기는 하는데, 윈도우에 있는 크롬의 버전과 개발프로그램의 selenium, chromedriver 버전 맞춰주는 것이 귀찮아서 ChromiumWebBrowser 이라는 nuget 패키지를 사용했다.
ChromiumWebBrowser 을 form에 추가해주고 자동으로 컨트롤을 조작할 때는 javascript를 바인딩하여 사용하는데,
주로 EvaluateScriptAsync 함수를 사용한다.
그런데 PC가 느리거나 버벅대는 등의 지연이 발생하면 컨트롤 조작 흐름이 깨져서 원하는 작업을 못 하는 경우가 많았다.
그래서 EvaluateScriptAsync 의 작업이 다 끝났는지를 확인하는 작업이 꼭 필요한 것 같다.
bool bCheck2 = false;
while (!bCheck2)
{
var task2 = chrome.EvaluateScriptAsync("document.getElementsByName('form_input_1')[0].value = '" + m_strID[iNo] + "';");
var result2 = await task2;
while (task2.Status != TaskStatus.RanToCompletion)
Thread.Sleep(100);
bCheck2 = result2.Success;
Thread.Sleep(50);
}
위 코드는 EvaluateScriptAsync 으로 컨트롤을 조작해주고, 완료될 때까지 기다렸다가 완료가 된 이후 성공했는지 확인해서 실패하면 성공할 때까지 재시도 하는 무식한 방법이다.
무식한데, 나름 성과는 있어서 이유모를 자동화 실패를 상당히 잡아냈다.
무식하면 용감하다. ㅎ