在 JavaScript 中模拟人类点击

hen*_*ald 3 javascript web-crawler web-scraping

我有一个小刮板,我需要在其中使用 JavaScript 单击锚链接。我试过几个方法:jQuery.click()document.createEvent('MouseEvents')等他们都有点工作,但是他们并不完全执行像一个人点击(他们打开一个标签像他们应该,但不启动下载)。

锚标记具有以下属性:

onclick="if (document.getElementById('ReportViewer_ctl01_ctl05_ctl00').selectedIndex == 0) return false; 
if (!ClientToolbarReportViewer_ctl01.HandleClientSideExport()) __doPostBack('ReportViewer$ctl01$ctl05$ctl01','');return false;"
Run Code Online (Sandbox Code Playgroud)

我也试过在命令行中运行这个问题的关键:

 __doPostBack('ReportViewer$ctl01$ctl05$ctl01','')
Run Code Online (Sandbox Code Playgroud)

这也有点工作,但不完全像人类点击。

如果需要,我可以详细介绍,但目前我正在寻找一种我认为应该存在的灵丹妙药。

Jos*_*kle 5

我保存了一个 pastebin 保存了两种编程方式来做到这一点。只有当 google 决定去除其默认函数的 window 对象(以及所有其他对象)时,我才失败了 >.>

http://pastebin.com/VMHvjRaR

function callClickEvent(element){
    var evt = document.createEvent("HTMLEvents"); 
    evt.initEvent("click", true, true); 
    element.dispatchEvent(evt);
}

function callClickEvent2(element){
    var evt = document.createEvent("MouseEvents");
    evt.initMouseEvent("click", true, true, window,
    0, 0, 0, 0, 0, false, false, false, false, 0, null);
    element.dispatchEvent(evt);
}

callClickEvent(document.getElementById("myElement"))
callClickEvent2(document.getElementById("myElement"))
Run Code Online (Sandbox Code Playgroud)

MDN 文档: