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