在JavaScript中模拟人工点击

在JavaScript中模拟人工点击,javascript,web-crawler,web-scraping,Javascript,Web Crawler,Web Scraping,我有一个小的刮板,我需要点击一个锚链接使用JavaScript。我尝试过几种方法:jQuery.click(),document.createEvent('MouseEvents')等等。它们都可以正常工作,但是它们不像人工单击那样完全执行(它们会像应该的那样打开选项卡,但不会开始下载) 锚定标记具有以下属性: onclick="if (document.getElementById('ReportViewer_ctl01_ctl05_ctl00').selectedIndex == 0) re

我有一个小的刮板,我需要点击一个锚链接使用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;"
我还尝试在命令行中运行以解决这一问题:

 __doPostBack('ReportViewer$ctl01$ctl05$ctl01','')
这也算是一种工作方式,但并不完全像人类的点击


如果需要,我可以更详细地介绍,但目前我正在寻找一个我认为应该存在的魔术子弹。

我保存了一个粘贴箱,其中有两种编程方法。只有当google决定将window对象(以及所有其他对象)的默认功能删除时,我才失败>>

MDN文档:


为什么不使用
PHP cURL
访问所需的uri(以防您使用
PHP
作为服务器端语言)?我认为这种差异是出于深思熟虑的安全原因;这似乎是为了防止硬盘下载/EULA接受等。虽然我可能会大错特错。@yoda谢谢,不用php,这是一堆零碎的东西。这个链接实际上提交了一个表单来模拟下载。@beck那么你是如何在页面上注入javascript的呢?提及与主题相关的所有内容总是很有用的。
这也很有效,但并不完全像人类的点击。
-你能解释一下“类作品”是什么意思吗?b/c这种方法应该有效。Live demo 1:(适用于所有当前浏览器;在IE8中不起作用,因为IE8没有实现DOM事件)Live demo 2:(同样适用于所有当前浏览器;在IE8中不起作用)@Joseph Marikle您能否更新答案,因为现在现代浏览器能够区分人工点击和模拟/触发/调度事件。
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"))