2011-04-17 110 views
1

我想获得网页中特定图像的坐标(X,Y)。获取图像坐标后,我将光标移动到此位置,然后通过编程方式在此图像上单击。在C#中的模板匹配

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

如果这是不可能在C#中。有人建议我在这种情况下任何破解,

+0

哪里网页? – SLaks 2011-04-17 12:05:16

+2

你想解决什么问题?你提供的解决方案不是问题。 – Vitalik 2011-04-25 13:20:08

回答

1

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

+0

做jquery支持模板匹配。我有我想要在网页中找到的坐标图像。 – 2011-04-17 12:33:10

+0

是的,你可以给该图像一个ID或类名。例如:'var x = $('your-image-id')。offset()。left; var y = $('your-image-id')。offset()。top;' – 2011-04-17 12:39:32

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 

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

+0

不,我在本地存储图像,我想在网页(模板匹配)中找到这个图像位置。 – 2011-04-17 12:38:49

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(); 
} 

要调用JavaScript使用C#,您需要创建WebBrowser控件,加载网页,然后调用脚本。 You can find how to do that here.

MSDN documentation for HtmlDocument.InvokeScript