c# WinFrom WebBrowser 질문 드립니다.

조회수 1852회

윈폼 웹 브라우저에서 버튼을 클릭 하면 주어진 웹 페이지의 요소들을 검색하여 A href 태그나 Form submit이 있을경우 InvokeScriptInvokemember로 실행을 하고 변경 된 페이지 Url를 Return 받으려고 하는데요.

MessageBox.Show(this.WebBrowser1.Url.ToString()); 을 쓰면 변경 전 페이지 URL이 메세지 박스로 띄워지고 그 이후 페이지 변경 처리가 됩니다.

그래서 WebBrowserReadyState.Complete 또는 this.webBrowser1.IsBusy == false 조건을 이용하여 문서가 로딩됐을 경우 URL를 받아오도록 적용하 였지만 결과는 같네요.

전체 요소 검색이 끝날때 까지(foreach문 종료 시 까지) 페이지 변동이 안되고 변경전 페이지만 출력이 되다가 버튼 이벤트가 끝나면 제일 마지막으로 변경되는 페이지로 이동이 됩니다.

간단히 정리하자면 html의 전체요소 검색도중 페이지를 변경 부분이 있으면 페이지를 전환하고 Url을 받으려고 합니다. URL을 받은 이후엔 GoBack(); 함수로 다시 뒤로가기해서 요소검색을 진행하면 되지 않을까 합니다만..

추가 설명 : 예를 버튼으로 들어서 c# WebBrowser에서 마우스 클릭이 아닌 매서드를 이용하여 코드내에서 웹 페이지의 여러개의 버튼을 누른다고 한다면, 하나 눌렀을때 결과를 받아올 수 있는게 아니라 전체 다 눌러진뒤에 마지막 버튼 결과만 나오는데. 하나 누르고 결과를 받아올수 있는 방법을 얻고 싶습니다. 희안한건 첫번째 버튼 클릭 후 메세지 박스를 띄우면 메세지 박스가 종료 될때 첫번째 클릭한 결과가 나온다는 점입니다. 스레드를써서 돌리면 된다는 글귀가 있어서 해봤는데 같은 결과가 나오구요. InvokeMemberInvokeScript를 실행하는 부분만 따로 함수로 빼내어 실행을 해봤는데도 동일 합니다.

이 부분에 대해 어떻게 처리해야 될지 고민입니다.

고수님들의 현명한 답변 부탁드리겠습니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)