2011-03-10 7 views
0

IE DOM에 액세스 할 수있는 방법이 있습니까? 예를 들어 현재 표시된 페이지를로드하고 데이터를 가져 오는 웹 페이지 스크래퍼가 있습니다. 페이지를 다운로드하고 처리하는 몇 가지 방법을 보았지만 웹 사이트에서 동적 결과를 제공하고 로그인이 필요할 때 작동하지 않습니다.IE에서 IE에 액세스 할 수 없음 C#에서

데이터에 액세스하고 wcf를 통해 공유하려면 bho를 작성하지 않아야합니다. C++과 msaa 서버를 사용하여 데이터를 가져 오는 몇 가지 예를 보았지만 수년 동안 C++을 사용하지 않았으므로 C++ 도우미를 사용하지 않으려 고하기에 이르렀습니다.

TIA.

답변

2

당신이해야 할 일에 따라, WatiN과 같은 간단한 것을 사용하는 것이 좋습니다. 브라우저 인스턴스를 인스턴스화하고 트리를 걷는 훌륭한 도구입니다. DOM 조작은 매우 쉽고 잘 문서화되어 있습니다 (웹에 많은 예제가 있습니다).

+0

+1. 이것을 생각한 것을 잊었습니다. 파서 (WebRequest) + 파서 (parser)가 제공 할 수있는 것 이상의 대부분의 요구를 만족시킬 것입니다. – meklarian

1

스크래핑과 요청 만 수행하는 경우 작업 할 때 .NET과 함께 제공되는 WebRequest 개체를 사용하는 것이 가장 좋을 것입니다. 당신이 IE DOM에 표시되는 것과 정확히 액세스 할 수 있어야합니다 경우

WebRequest Class @ MSDN

그러나, 당신은 액세스하려면 Microsoft Active 내게를 사용해야합니다. 대상 IE 창에 대한 창 핸들이나 신뢰할 수있는 위치를 식별 할 수 있고 사용자 세션에서 볼 수 있으면 Active Accessibility가 대상 IE 창에 액세스하고 DOM을 파고 드는 가장 좋은 방법입니다. C++을 사용하는 것이 절대적으로 필요한 것은 아니지만 C++에서이 작업을하는 것이 더 쉬울 것입니다.

Active Accessibility User Interface Services @ MSDN

당신은 열거 프로세스에서 검색 한 DOM 창 중 하나를 바탕 화면이나 프레임 윈도우의 핸들을 찾을 수 EnumChildWindows을 사용하려면 (또는 무력 쿼리) 수 있습니다. .NET에서 프로세스 열거는 System.Process 클래스에서 사용할 수 있습니다.

EnumChildWindows @ MSDN

EnumWindows signature @ pinvoke.net
EnumChildWindows signature @ pinvoke.net

Process.GetProcesses() @ MSDN
Process.MainWindowHandle @ MSDN

당신이 COM을 추가, C#으로 DOM을 걸을 수 있도록하고 MSAA 할 얘기가 유형 선언을 추가하려면 프로젝트에 'Microsoft HTML Object Library'에 대한 참조를 추가하고 MSAA에 P/Invoke 서명을 추가하십시오.

AccessibleObjectFromWindow Signature @ pinvoke.net

는 MSAA를 호출 할 수 있습니다되면, 창 핸들에서 Active 내게 통해의 IDispatch를 검색 할 수 있습니다. OBJID_NATIVEOM을 보내면 IDispatch으로 문의 할 수 있습니다. 여기에서 AccessibleObjectFromWindow() @ MSDN

Retrieving an IAccessible Object @ MSDN

, IDispatch는 DOM 스크립트 모델 방법 등을 모두 가지고 IHTMLWindow2 또는 IHTMLDocument2 (및 파생 상품)에 캐스트 할 수 있습니다.불행히도이 방법을 통해 어느 것이 반환되는지는 기억할 수 없지만 어떤 경우 든 IHTMLWindow2document 속성을가집니다 (스크립트에서는 window.document과 동일). DOM에 대한 액세스를 제공하기 위해 IHTMLDocument2과 파생 된 모든 인터페이스로 표시되는 것으로 해결할 수 있습니다.

관련 문제