كيفية الحصول على إحداثيات عنصر HTML باستخدام C#؟

StackOverflow https://stackoverflow.com/questions/1547614

  •  20-09-2019
  •  | 
  •  

سؤال

أخطط لتطوير زاحف الويب ، والذي من شأنه أن يستخرج إحداثيات عناصر HTML من صفحات الويب. لقد اكتشفت أنه من الممكن الحصول على إحداثيات عنصر HTML باستخدام مجموعة "MSHTML". فى الحال أود أن أعرف ما إذا كان ذلك ممكنًا وكيفية الحصول على المعلومات اللازمة فقط (HTML ، CSS) من صفحة الويب ، ثم باستخدام فئات MSHTML المناسبة صيح إحداثيات جميع عناصر 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 من المستند الحالي مثل SO:

// 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's وظيفة الإزاحة ().

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top