我打算开发网页爬虫,它将从网页中提取html元素的坐标。我发现通过使用“mshtml”程序集可以获取html元素坐标。现在我想知道是否有可能以及如何从网页获取必要的信息(html,css),然后通过使用适当的mshtml类获得正确的所有html元素的坐标?如何使用C#获取HTML元素坐标?
谢谢!
我打算开发网页爬虫,它将从网页中提取html元素的坐标。我发现通过使用“mshtml”程序集可以获取html元素坐标。现在我想知道是否有可能以及如何从网页获取必要的信息(html,css),然后通过使用适当的mshtml类获得正确的所有html元素的坐标?如何使用C#获取HTML元素坐标?
谢谢!
我使用这些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");
我不确定在C#中如何做到这一点,因为它不是我选择的语言,但可以使用Javascript完成,特别是使用jQuery的offSet() function。
您能解释一下这个方法吗?为了获得我需要的信息,应该采取哪些步骤? – spacemonkey 2009-10-10 11:49:55
这只是调用您想要偏移的DOM元素上的函数的一种情况。这个环节有几个例子。 – 2009-10-10 12:00:51
你的意思是坐标从浏览器窗口的顶部和左侧边缘的像素?由于这在不同的浏览器中呈现略有不同,我怀疑这甚至是可能的。 (而且,定义哪个坐标“正确”似乎也是不太可能的) – 2009-10-10 10:44:18
它可能会呈现稍微不同的结果,但只有一种方法是正确的(假设您有一个CSS文件可以消除浏览器默认值) – erikkallen 2009-10-10 10:56:29
以像素为单位的坐标可能与父节点相关。我的意思是关于正确的坐标,是没有css文件的呈现的html文件会给出不同的坐标元素。我不知道是否有可能使用HTMLDocument类来分析网页,而无需手动下载它,并尽可能高效地进行分析。 – spacemonkey 2009-10-10 10:59:07