C# / vb.net Webbrowser 获取 htmlelement 位置

本文关键字:获取 htmlelement 位置 Webbrowser net vb | 更新日期: 2023-09-27 18:32:25

我正在尝试获取 html 元素在 .net 的网络浏览器控件中的位置并失败,我需要元素相对于整个文档或 Web 浏览器控件的确切位置,以便能够使用 SendMessage() P/Invoke 发送鼠标单击。

我已经从这里尝试了解决方案,但它不起作用:使用 C# 获取 HTML 元素在 Web 浏览器控件中的绝对位置

我猜这是因为该页面依赖于非常复杂的ajax和css。

函数"WebBrowser1.Document.GetElementFromPoint()"在获取准确的html元素方面工作得很好,我只需要相反的元素。

其他明智的做法是,我是否应该继续使用"GetElementFromPoint()"进行搜索,直到获得正确的元素???

谢谢。

C# / vb.net Webbrowser 获取 htmlelement 位置

由于我无法对您的问题发表评论,因此我将进行"答案",即使它不会太多......

  • 通过JavaScript/InvokeMethod单击元素有什么问题?
  • 您还可以修改元素的 CSS,使其涵盖整个视口,允许您单击Web中的任何位置浏览器控件的视区。

如果您要发布链接中的解决方案无法正常工作的原因,那么为您提供问题的解决方案会更容易

通过简单地执行以下操作,您可能会获得相同的完全相同的行为:

public void ClickHtmlElement(WebBrowser o, string htmlElementId)
{
  const string mask = @"javascript:void(document.getElementById('{0}').click())";
  string url = string.Format(mask, htmlElementId);
  o.Navigate(url);
}

我有完全相同的问题。 Invoke, .domelement.click(), .click etc...不起作用,sendmessage 确实有效,但这需要确切的 X,Y 位置。

我目前唯一的解决方案是可怕的。基本上使用 GetElementFromPoint(),但不是逐点进行,而是可以使用元素宽度和高度的步长。

因此,如果您的元素高 500 像素,宽

500 像素,那么您可以搜索点 0,500,1000,1500 等。

我找到了一些jQuery代码,显示了获得正确的X,Y位置实际上有多复杂:

https://github.com/jquery/jquery/blob/master/src/offset.js

我不敢相信没有更简单的方法:-(