我想为网站写一些自动化。只需填写表单并模拟元素点击即可。但是对于某些元素,JavaScript函数click()不起作用。例如,它位于此页面上:http://www1.plus.pl/bsm/如果我在“Wyślij”按钮上单击(),则不会发生任何事情。这是我的命令:
document.getElementsByClassName('tab-button')[0].click()
有什么问题?为什么在其他元素上这个功能起作用?
答案 0 :(得分:3)
document.getElementsByClassName('tab-button')[0].dispatchEvent(event)
或
document.getElementsByClassName('tab-button')[0].fireEvent(event)
是你可以这样做的方式......但是在网站上尝试它,'click'事件没有绑定到那个元素
<强> EDITED 强> 见How to trigger event in JavaScript?
答案 1 :(得分:1)
我怀疑这是因为您正在测试的浏览器没有.getElementsByClassName
的原生支持。请尝试使用document.querySelectorAll
,或为您的元素分配ID并使用document.getElementById
。 E.g:
var btn = document.querySelectorAll("tab-button")[0];
btn.click();
答案 2 :(得分:0)
你是否在Loaded
标签body
后执行此操作,如果某些元素没有点击它可能是因为它们在脚本运行时没有被加载到DOM中。
答案 3 :(得分:0)
在你的帮助下我找到了解决方案:
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
。有些网站以与其他网站不同的方式完成。另一个重要的是第3个参数。应将其设置为false
(在此特定情况下)。它设置cancelable
值。如果没有设置为false
则不起作用。
感谢您的所有答案!
答案 4 :(得分:0)
似乎有些元素需要dispatchEvent()
,而另一些元素则需要普通的click()
。要建立在gumik的答案上(谢谢!),这是我的复制式意大利面,用于快速简单的Javascript自动化,只需单击即可:
function click(node) {
var evt = document.createEvent('MouseEvents');
evt.initMouseEvent('mousedown', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
node.dispatchEvent(evt);
node.click();
}
用法:
var button = document.querySelector(".somecssclassname");
click(button);