2009-10-10 3 views
1

웹 크롤러를 개발할 계획입니다. 웹 크롤러는 웹 페이지에서 HTML 요소의 좌표를 추출합니다. 나는 "mshtml"어셈블리를 사용하여 html 요소 좌표를 얻는 것이 가능하다는 것을 알았다. 지금 당장 웹 페이지에서 필요한 정보 (html, css)를 얻는 방법과 가능한 mshtml 클래스를 얻는 방법을 알고 싶습니다. 올바른 모든 html 요소의 좌표는 어떻게됩니까?C#을 사용하여 HTML 요소 좌표를 가져 오는 방법은 무엇입니까?

고맙습니다!

+0

당신은 브라우저 창 위쪽 및 왼쪽 가장자리에서 픽셀 단위로 좌표를 의미합니까? 이것은 브라우저마다 약간 다르게 렌더링되기 때문에 가능하다고 생각합니다. (그리고 또한 어느 좌표가 "올바른지"를 정의하는 것이 다소 불가능한 것처럼 보일 것입니다.) –

+0

약간의 differnet을 렌더링 할 수도 있지만 한 가지 방법 만 정확합니다 (브라우저 기본값을 제거하는 CSS 파일이 있다고 가정). .) – erikkallen

+0

좌표는 픽셀 단위로 부모 노드와 관련이있을 수 있습니다. 올바른 좌표에 대한 의미는 CSS 파일없이 렌더링 된 HTML 파일이 요소의 다른 좌표를 제공한다는 것입니다. HTMLDocument 클래스를 사용하여 수동으로 다운로드하지 않고 웹 페이지를 분석하고 가능한 한 효율적으로 수행 할 수 있는지 여부는 알 수 없습니다. – spacemonkey

답변

2

이 C# 함수를 사용하여 요소 위치를 결정합니다. 문제의 HTML 요소에 대한 참조를 전달해야합니다.

public static int findPosX(mshtml.IHTMLElement obj) 
{ 
    int curleft = 0; 
    if (obj.offsetParent != null) 
    { 
    while (obj.offsetParent != null) 
    { 
     curleft += obj.offsetLeft; 
     obj = obj.offsetParent; 
    } 
    } 

    return curleft; 
} 

public static int findPosY(mshtml.IHTMLElement obj) 
{ 
    int curtop = 0; 
    if (obj.offsetParent != null) 
    { 
    while (obj.offsetParent != null) 
    { 
     curtop += obj.offsetTop; 
     obj = obj.offsetParent; 
    } 
    } 

    return curtop; 
} 

나는과 같이 현재 문서에서 HTML 요소를 얻을 :

// start an instance of IE 
public SHDocVw.InternetExplorerClass ie; 
ie = new SHDocVw.InternetExplorerClass(); 
ie.Visible = true; 

// Load a url 
Object Flags = null, TargetFrameName = null, PostData = null, Headers = null; 
ie.Navigate(url, ref Flags, ref TargetFrameName, ref PostData, ref Headers); 

while(ie.Busy) 
{ 
    Thread.Sleep(500); 
} 

// get an element from the loaded document 
mshtml.HTMLDocumentClass document = ((mshtml.HTMLDocumentClass)ie.Document); 
document.getElementById("myelementsid"); 
0

나는 C#에서이 작업을 수행 할 수있는 방법이 확실하지 않지만 Javascript를 사용하여 특히 jQuery의 offSet() function을 사용하여 수행 할 수 있습니다.

+0

이 방법을 조금 더 설명해 주시겠습니까? 필요한 정보를 얻으려면 어떤 단계를 수행해야합니까? – spacemonkey

+0

오프셋을 적용 할 DOM 요소에서 함수를 호출하는 경우입니다. 이 링크에는 몇 가지 예가 있습니다. –