Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript click()不';有些元素不行_Javascript_Automation_Click_Web - Fatal编程技术网

Javascript click()不';有些元素不行

Javascript click()不';有些元素不行,javascript,automation,click,web,Javascript,Automation,Click,Web,我想写一些自动化的网站。只需填写表单并模拟单击元素。但对于某些元素,JavaScript函数click()不起作用。例如,它就在这个页面上:如果我在“Wyślij”按钮上单击(),什么都不会发生。这是我的命令: document.getElementsByClassName('tab-button')[0].click() 怎么了?为什么在其他元素上此函数可以工作?我怀疑这是因为您正在测试的浏览器没有对的本机支持。尝试改用,或者为元素分配一个ID并使用document.getElementBy

我想写一些自动化的网站。只需填写表单并模拟单击元素。但对于某些元素,JavaScript函数click()不起作用。例如,它就在这个页面上:如果我在“Wyślij”按钮上单击(),什么都不会发生。这是我的命令:

document.getElementsByClassName('tab-button')[0].click()

怎么了?为什么在其他元素上此函数可以工作?

我怀疑这是因为您正在测试的浏览器没有对
的本机支持。尝试改用,或者为元素分配一个ID并使用
document.getElementById
。例如:

var btn = document.querySelectorAll("tab-button")[0];
btn.click();

是你能做到的方式。。。但是在站点上尝试时,“click”事件并没有绑定到该元素

已编辑
请参见在
body
标记上加载
后是否执行此操作,如果某些元素未单击,可能是因为脚本运行时未将其加载到DOM中。

在您的帮助下,我找到了解决方案:

var evt = document.createEvent('MouseEvents')
evt.initMouseEvent('mousedown', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
document.querySelectorAll('.tab-button')[0].dispatchEvent(evt)
请注意,它应该是
mousedown
事件,而不是
click
。有些网站的做法与其他网站不同。另一个重要的是第三个参数。应将其设置为
false
(在这种特殊情况下)。它设置可取消的
值。如果不将此设置为
false
,它将不起作用


谢谢你的回答

似乎有些元素需要
dispatchEvent()
,而另一些元素则需要一个普通的
click()
。基于gumik的答案(谢谢!),这里是我的复制面食,用于快速而肮脏的Javascript自动化,只需单击以下内容:

函数单击(节点){
var evt=document.createEvent('MouseEvents');
evt.initMouseEvent('mousedown',true,false,window,0,0,0,false,false,false,false,0,null);
节点调度事件(evt);
node.click();
}
用法:

var button = document.querySelector(".somecssclassname");
click(button);

我100%确信我得到了合适的元素。我已经在三种不同的浏览器上测试了它:Firefox、Opera、QtWebKit。它给出了以下错误:未处理的InternalException:Error\u ARGUMENTS\u ERR;“fireEvent”不是一个函数。这个元素没有“点击”事件,所以为什么我用鼠标点击它会发生什么事情呢?有些浏览器支持fireEvent,有些浏览器支持dispatchEvent。您应该首先执行if(…dispatchEvent){…dispatchEvent('click')}(对于.fireEvent也是如此)。可能事件绑定不是click。可能是mousedown?您是对的。它是mousedown事件。但它比您编写的更复杂。此代码运行良好:
var evt=document.createEvent('MouseEvents');evt.initMouseEvent('mousedown',true,false,window,0,0,0,false,false,false,0,null);document.getElementsByClassName('tab-button')[0]。dispatchEvent(evt);
是。感谢您的宝贵意见。我用解决方案更新了问题。值得注意的是(至少在某些情况下)IE的版本,dispatch event不存在-您需要使用fireEvent-我搜索的此对象已加载。我可以从此对象获取一些信息,但click()不起作用。您正在触发click事件,但未绑定事件,对吗?有人找到了吗?在某些浏览器上
[0]
如果不是数组,则可能无法使用。Gumik-请将您的解决方案作为答案发布,而不是将其编辑到问题中
var evt = document.createEvent('MouseEvents')
evt.initMouseEvent('mousedown', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
document.querySelectorAll('.tab-button')[0].dispatchEvent(evt)
var button = document.querySelector(".somecssclassname");
click(button);