日期:2014-05-17  浏览次数:21194 次

WebBrowser浏览器控件,如何获取页面某网页元素XPATH!
本帖最后由 u011880860 于 2013-08-30 03:18:19 编辑
通过MSHTML,鼠标点击WebBrowser浏览器控件,网页某区域元素,如何获取元素的XPATH。

本人是学习浏览器控件的菜菜鸟,还望高手指点迷津。。

首先:鼠标API函数
[DllImport("User32")]
public extern static void mouse_event(int dwFlags, int dx, int dy, int dwData, IntPtr dwExtraInfo);
[DllImport("User32")]
public extern static void SetCursorPos(int x, int y);
[DllImport("User32")]
public extern static bool GetCursorPos(out POINT p);
public struct POINT
{
public int X;
public int Y;
}
public enum MouseEventFlags
{
Move = 0x0001,
LeftDown = 0x0002,
LeftUp = 0x0004,
RightDown = 0x0008,
RightUp = 0x0010,
MiddleDown = 0x0020,
MiddleUp = 0x0040,
Wheel = 0x0800,
Absolute = 0x8000
}
其次:载入webBrowser
private void FormBrower_Load(object sender, EventArgs e) 

   webBrowser.Navigate("http://www.csdn.net"); 
}
接着:根据鼠标API获取到X,Y坐标区域。。
如何通过鼠标点击,获取的区域,导出网页元素的XPATH?

解析步骤:
创建一个HtmlElment2的getBoundingClientRect方法得到元素矩形(Rect),即元素Webbrowser位置。再通过offsetTop, .offsetLeft, .offsetWidth, .offsetHeight四个属性,获取绝对位置。
我知道,WebBrowser.document.activeElement.ID能够获取到某元素的ID。
但是,,如何获取到网页元素的XPATH,始终搞不出来。。。

还望高手给个简单的实例大概代码。。我做了3天了,实在搞不定才请人帮忙。。。


------解决方案--------------------

private void FormBrower_Load(object sender, EventArgs e)
{
webBrowser.Navigate("http://www.csdn.net");
webBrowser.DocumentCompleted += (s, x) =>
{
webBrowser.Document.Click -= Document_Click;
webBrowser.Document.Click += Document_Click;
};
}

void Document_Click(object sender, HtmlElementEventArgs e)
{
string path = "";
var element = webBrowser.Document.GetElementFromPoint(e.ClientMousePosition);
for (; element != null; element = element.Parent)