1

我打算开发网络爬虫,它会从网页中提取 html 元素的坐标。我发现可以通过使用“mshtml”程序集来获取 html 元素坐标。现在我想知道是否有可能以及如何从网页中仅获取必要的信息(html、css),然后通过使用适当的 mshtml 类获取所有 html 元素的正确坐标?

谢谢!

4

2 回答 2

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");
于 2009-11-13T02:26:07.163 回答
0

我不确定如何在 C# 中做到这一点,因为它不是我选择的语言,但可以使用 Javascript 来完成,特别是使用 jQuery 的offSet() 函数

于 2009-10-10T11:33:06.557 回答