WebBrowser浏览器控件,如何获取页面某网页元素XPATH!

c4design 2013-08-30 03:06:16
通过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天了,实在搞不定才请人帮忙。。。

...全文
869 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
O西瓜 2013-08-30
  • 打赏
  • 举报
回复
你可以用JS注入,无论获取Rect, Name,节点的Html都很方便的。
jshi123 2013-08-30
  • 打赏
  • 举报
回复
怎么没法用,你举个例子
蒋晟 2013-08-30
  • 打赏
  • 举报
回复
网页结构没有一定的规律,得看服务器端逻辑。比如如果你按页面第二个table的第三行这么找的话,碰见一个可以隐藏的服务器端控件就抓瞎了。
c4design 2013-08-30
  • 打赏
  • 举报
回复
引用 1 楼 jshi123 的回复:

	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)
			path = element.TagName + (path == "" ? "" : "/") + path;
		MessageBox.Show(path);
	}
实际上,webBrowser控件,获取到网页的位置,老是不准确。不知道是webBrowser问题,还是别的问题,听朋友说换成COM接口Browser就没问题。。有点不明白。 jshi123jshi123大哥,你那获取的XPATH路径,没法用。 jiangsheng版主,要做的东西,是设计个简单的MYIE浏览器,利用webBrowser浏览器,通过鼠标点击网页元素,获取某段区域,通过XPATH路径加HtmlAgilityPack。某范围段内容:点击,采集,编辑,存储,发送。
蒋晟 2013-08-30
  • 打赏
  • 举报
回复
网页是HTML不是XML啊,谈什么xpath。
jshi123 2013-08-30
  • 打赏
  • 举报
回复

	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)
			path = element.TagName + (path == "" ? "" : "/") + path;
		MessageBox.Show(path);
	}

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧