zoukankan      html  css  js  c++  java
  • 利用JS最真实的模拟鼠标点击

    为了破解永乐票务登录验证码问题

    http://www.228.com.cn/auth/login?logout

    当然,打码的过程自然依赖第三方平台,但问题是,哪怕平台给了你需要点击的(相对)坐标。你又如何进行点击呢?

    在 C# 中,我本想利用控件 WebBrowser 来解决这个问题。结果翻了一大圈也没有找到什么有用的API。就连查找元素的方式也只有getElementByTag 和 getElementById。其次是 click() 方法。

    但如果仅仅提供如此,我还不如直接往页面中使用 js 更轻快。

    1、通过 chrome 控制台的Event Listeners。我们查看该img的绑定click事件,得知实际绑定click事件的元素是 .geetest_item.geetest_big_item

    2、我们试着往控制台执行: $(".geetest_item.geetest_big_item").click(); 

    发现图片什么变化也没有,然而等我们再次点击图片时,我们看到了变化:

    点击的时候,居然是2,为什么不是1呢?

    这说明我们的js起了效果,说明我们确确实实触发了图片的click事件。那么为什么执行js的时候,图片一点反应都没有?

    click() 和 真实点击的区别到底在哪里?答案就是 event 的不同。我们可以通过一个实验来证明一下,新建一个index.html文件:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <button id="fuck">fuck</button>
    </body>
    <script src="https://cdn.bootcss.com/jquery/1.9.1/jquery.min.js"></script>
    <script>
        $("#fuck").click(function (e) {
            console.log(e);
        })
    </script>
    </html>

    打开这个页面,先是手动点击一下 “fuck” 按钮,然后再到控制台中输入 : $("#fuck").click();  我们来对比两者的区别:

    我们发现,通过 click() 而产生的 event 参数较比真实点击的e参数非常匮乏。这可能就是原因,并且我们发现一个关键的参数 clientX , clientY 。

    那么,我们结合之前click() 会导致 +1 的现象,猜测对方的代码可能是这样的:

    var i =0;
    $(".geetest_item.geetest_big_item").click(function (e) {
        i++;
        if (e.clientX && e.clientY) {
            $(".geetest_item.geetest_big_item").append("<div>" + i + "</div>")
        }
    })

    根据这个,我们只想办法在 click() 的时候,加入参数clientX , clientY 。应该就可以了。当然click是没有参数的。所以我们需要手动创建 Event

    var ev = document.createEvent('HTMLEvents'); 
    ev.clientX = 625
    ev.clientY = 356
    ev.initEvent('click', false, true); 
    $(".geetest_item.geetest_big_item")[0].dispatchEvent(ev)

    结果发现,是可行的

    至此、破解了这个验证码点击问题。

    其他传送门:

    # 宝哥教你#查看jquery绑定的事件函数
    http://sudodev.cn/detect-jquery-event-function-define/
    
    # 图片还原和滑块位置求解
    http://blog.csdn.net/qew110123/article/details/53068098
  • 相关阅读:
    handsontable-developer guide-data binding,data sources
    Android版Web服务器实现(三)HTTP响应
    Android版Web服务器实现(二)使用服务来监听HTTP请求
    HTTP协议详解(很详细)
    Android版Web服务器实现(一)HTTP协议请求头解析
    HTTP协议中Content-Length的详细解读。
    Android基于SwiFTP开源库的FTP实现(FTP匿名登录)
    Android之查看Wifi密码
    道德经与抽象、接口及框架
    JAVA中利用JNI与VS2012实现C/C++的DLL调用
  • 原文地址:https://www.cnblogs.com/CyLee/p/7513342.html
Copyright © 2011-2022 走看看