0

我正在尝试获取 .net 的 webbrowser 控件中 html 元素的位置,但失败了,我需要元素相对于整个文档或 webbrowser 控件的确切位置才能使用 SendMessage() P/Invoke 发送鼠标点击..

我已经尝试过这里的解决方案,但它没有用: getting absolute position of HTML element in webbrowser control with C#

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

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

否则,我是否应该继续使用“GetElementFromPoint()”进行搜索,直到获得正确的元素?

谢谢。

4

3 回答 3

0

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

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

因此,如果您的元素是 500 像素高和 500 像素宽,那么您可以搜索点 0,500,1000,1500 等。

我发现了一些 jQuery 代码,这些代码显示了获得正确的 X、Y 位置实际上是多么复杂:

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

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

于 2014-01-27T11:35:13.650 回答
0

由于我无法对你的问题发表评论,我会去做一个“答案”,即使它不会是一个很大的......

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

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

于 2012-05-15T12:07:35.503 回答
0

您只需执行以下操作即可获得相同的行为:

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);
}
于 2012-07-21T11:49:56.837 回答