1

我想获取网页中特定图像的坐标(X,Y)。获取该图像坐标后,我将光标移动到该位置并以编程方式单击该图像。

我已将图像保存在本地,我必须进行比较我会将此图像与网页进行比较,并在网页中找到它的位置。这在 C# 中怎么可能

如果这在 C# 中是不可能的。有人会建议我在这种情况下进行任何黑客攻击吗?

4

4 回答 4

1

AForge 中的模板匹配是通过 ExhaustiveTemplateMatch 类完成的:

http://www.aforgenet.com/framework/docs/html/17494328-ef0c-dc83-1bc3-907b7b75039f.htm

但是您首先需要匹配浏览器窗口的屏幕截图。

于 2011-04-27T17:34:26.887 回答
1

任何网页都是特定于客户端浏览器的。您不能在 C# 中执行此操作,因为 C# 是一种服务器语言并在服务器上运行,然后以浏览器特定语言返回结果。每个客户端将具有不同的分辨率,因此图像的位置也不同。为了获取图像的坐标,您需要使用 javascript,然后将指针移动到该位置。您可以使用 jQuery 并获取图像位置。

于 2011-04-17T11:59:23.677 回答
0

据我了解,您想在显示包含您的图像的页面的浏览器上模拟单击事件。如果是这样,你可以做这样的事情 -

IntPtr lParam = (IntPtr)((y << 16) | x); 
IntPtr wParam = IntPtr.Zero; // Modifier flags - eg ctrl etc 
SendMessage(handle, 0x201, wParam, lParam); // Mouse LBUTTON down
SendMessage(handle, 0x202, wParam, lParam); // Mouse LBUTTON up

handle 是目标浏览器窗口句柄, (x, y) 是要模拟点击的位置 - 可以是图像矩形的中心。

于 2011-04-17T12:34:33.717 回答
0

我会使用纯 JavaScript 从网页中获取信息。

function getX(/* string */ elementId) {
    return document.getElementById(elementId).offsetLeft;
}

function getY(/* string */ elementId) {
    return document.getElementById(elementId).offsetTop;
}

如果您需要相对于视口的位置:

function getX(/* string */ elementId) {
    return document.getElementById(elementId).offsetLeft - document.body.scrollLeft;
}

function getY(/* string */ elementId) {
    return document.getElementById(elementId).offsetTop - document.body.scrollTop;
}

如果您需要在不使用鼠标的情况下对图像执行 onClick 操作:

function clickIt(/* string */ elementId) {
    document.getElementById(elementId).onclick();
}

要使用 C# 调用 JavaScript,您需要创建一个 WebBrowser 控件,加载网页,然后调用脚本。 你可以在这里找到如何做到这一点。

HtmlDocument.InvokeScript 的 MSDN 文档

于 2011-05-01T20:15:45.477 回答