특정 웹사이트에 존재하는 하이퍼링크 갯수 및 특정 하이퍼링크 아래에 존재하는 또 다른 하이퍼링크의 갯수 즉 3단계 레벨까지의 총 하이퍼링크 갯수를 알아내고자 프로그램을 하는데, 약 3-4시간 투입했지만 제대로 안된다. 배경 지식을 좀 더 쌓은 후에 다시 진입하여야 하여, 구글링한 자료를 아래와 같이 정리해 봅니다.
탭 관련해서는 생성과 포커스(이동) 및 해당 탭에서 자료 출력...을 하여야 합니다.
핸들의 개념이 있고요. List 등에서는 Last(), First() 등이 이미 있습니다.
//탭 생성
((IJavaScriptExecutor)_driver).ExecuteScript("window.open();");
//마지막 탭으로 이동.
_driver.SwitchTo().Window(_driver.WindowHandles.Last());
//첫 탭으로 이동.
_driver.SwitchTo().Window(_driver.WindowHandles.First());
//특정 탭 저장 후 이동.
string winHandleBefore = _driver.CurrentWindowHandle;
_driver.SwitchTo().Window(winHandleBefore);
//현재 탭 닫기.
_driver.Close();
//최대화 하기
driver.Manage().Window.Maximize();
stale element reference element is not attached to the page document
오류 메시지가 있을 경우, 구글링의 대부분은 아직 페이지가 로딩 완료되지 않았기 때문에, 해당 엘리먼트에 접근할 수 없는 경우로, 대개 sleep()을 넣는 것으로 대처법을 소개하고 있다.
필자의 경우는 위와 같은 상황은 아닙니다.
첫 페이지 URL에서 href를 찾고, ------------------ (1)
for문으로
각 href로 이동하여,
그 href에 존재하는 자식 레벨의 href를 찾는다.
근데, for 이 한 번 돌고, 2번째 돌때, (1)에 의해 있던 리스트의 2번째 요소를 접근하지 못하고,
"stale element reference element is not attached to the page document"의 메시지를 출력한다.
해결책은 다시 해당 '탭' 즉 해당 리스트를 뽑았던 '탭'으로 되돌아가야 한다.
driver.SwitchTo().Window(parentWindow);.
따라서, 각 element에 접근할 때 이미 추출해 놓았다 하더라도, 그 추출했던 '탭' 소스로 가야 한다는 것입니다.