在网页上模拟基于点击的事件

时间:2011-11-27 10:42:55

标签: c# javascript

此链接指向想象力验证码imagination

的实现

作者自己要求人们制定算法来尝试其针对AI攻击的效率。

基本上第一页要求鼠标点击图像上的任何地方......我的问题是我的算法在图像上出现了点(x,y),但我想在这个链接上实时模拟它...

有人可以告诉我如何在此链接上发送积分值并收回消息我是否成功....

基本上我在问我如何在我的算法使用C#提供的点上模拟鼠标点击此链接...

我只是想研究这个验证码的功能及其准确性。

非常感谢

4 个答案:

答案 0 :(得分:8)

如果您能够直接在该页面上执行JavaScript,则此代码将执行:

submitClick(document.getElementById("img").value, x, y, "tiled");

否则,请点击此网址,将您自己的值替换为idxy

http://goldbach.cse.psu.edu/s/captcha/captcha_controller.php?id=87170&x=66&y=149&source=tiled

解析响应 - 如果坐标正确,响应将包含“步骤2”。如果没有,响应将包含“步骤1”,它将具有<div id="error">

答案 1 :(得分:3)

如果您想从代码中使用他们的实时网站,我认为您正在谈论屏幕刮擦。我强烈建议您查看HTML Agility Pack(可通过nuget获取)。这将允许您将DOM读入您的应用程序,然后随意与它进行交互。

答案 2 :(得分:2)

这可能是一个愚蠢的答案,但如果您试图模仿鼠标点击并查明它是否成功,为什么不使用Selenium Browser add-in来记录您的脚本/写&#39 ;你自己的。

然后你可以有一个测试套件来试图反对你各种不同的验证码......希望这能达到你想要做的......

答案 3 :(得分:1)

在telerik上的

WebAii有这个功能。以下是我过去在某些时候根据您的情况定制的一些示例代码。只是将它放在一个类中,省略了类容器,因为它会填充格式

protected static Manager _manager = null;
    protected static Manager _manager = null;
    protected Browser _main;
    protected Find _find;
public WebAiiAutomater() 
{
    if (_manager != null)
    {
        foreach (var broswer in _manager.Browsers)
        {
            broswer.Close();

        }
        return;
    }

    var settings = new Settings(BrowserType.InternetExplorer, @"c:\log\") { ClientReadyTimeout = 60 * 1000 };

    _manager = new Manager(settings);
    _manager.Start();
    _manager.LaunchNewBrowser();
    _manager.ActiveBrowser.AutoWaitUntilReady = true;

    _main = _manager.ActiveBrowser;
    _find = _main.Find;
    _main.NavigateTo(@"http://goldbach.cse.psu.edu/s/captcha/");
    //start looping over your alogrithm trying different x,y coords against ClickImage(x,y
}

public bool ClickImage(int x, int y)
{
    //var beginsearch = _find.ById("captcha_img"); //this should get you the image, but you don't need
    _manager.Desktop.Mouse.Click(MouseClickType.LeftClick, x, y);
    Thread.sleep(1000); //wait for postback - might be handled internally though
    var errordiv = _find.ById("error");

    return errordiv !=null;
}