我正在尝试找到一种方法,通过Tampermonkey中用Javascript编写的用户脚本,在加载特定页面时单击特定按钮(即href)。看起来很简单,但是经过多次迭代,我没有任何代码可以工作。
这是我要按下的href和按钮的完整源代码:
<span data-react-class="require('reactComponents/workPipeline/SubmitAcceptTaskForm')['SubmitAcceptTaskFormLink']" data-react-props="{"text":"accept","refTag":"w_wp_acpt_warning"}"><span data-reactid=".4"><a href="#" data-reactid=".4.0">accept</a></span></span>
这是我一直在尝试使用的代码(我分别测试了每一行,但无济于事):
// ==UserScript==
// @name Accept Button WIP
// @include https://worker.mturk.com/projects/*
// ==/UserScript==
location.href = document.querySelector("a[href='#']");
document.querySelector("a[data-reactid='.4.0']").click();
document.getElementsByClassName(".4.0")[0].click();
location.href = document.querySelector("a[href='#']");
location.data-reactid = document.querySelector("a[data-reactid='.4.0']").click();
document.querySelector("span[data-reactid='.4']").click();
这是所有内容的屏幕快照,包括按钮包含在其中的DIV(鼠标悬停在必要的“接受”按钮上):
我不太确定自己在做什么错。我以为我尝试过的其中几行代码会行得通,但是就语法而言,我可能忽略了一些东西。任何和所有帮助将不胜感激。白天和黑夜都美好。
答案 0 :(得分:1)
很难说出为什么它对您不起作用...对我来说,在本地主机上进行以下HTML测试时,它没有问题:
<html>
<head>
<script type='text/javascript'>
function check(){
console.log('Hellow world');
}
</script>
</head>
<body>
<span data-react-class="require('reactComponents/workPipeline/SubmitAcceptTaskForm')['SubmitAcceptTaskFormLink']" data-react-props="{"text":"accept","refTag":"w_wp_acpt_warning"}"><span data-reactid=".4"><a href="#" data-reactid=".4.0" onclick='check()'>accept</a></span></span>
</body>
</html>
以及以下用户脚本:
// ==UserScript==
// @name Autoclick
// @namespace http://tampermonkey.net/
// @version 0.1
// @match http://localhost/test.html
// @grant none
// @run-at document-end
// ==/UserScript==
(function() {
'use strict';
document.querySelector("a[data-reactid='.4.0']").click();
})();
对我来说,它没有自动执行功能就工作了,我只是添加了@run-at
directive以取得很好的效果,但是没有它就可以工作。
“ Hello World” 消息在页面加载后出现在控制台上。
一个提示是,在大多数情况下,要在用户脚本上运行的代码应从控制台完全相同地运行。这样,您可以实时测试有效的方法。
答案 1 :(得分:0)
我决定选择不同的路线并选择其他按钮。无论出于什么原因,我都无法在页面加载时激活代码,而是选择通过以下方式选择页面上的另一个“接受”按钮:
document.getElementsByClassName("btn btn-primary")[0].click();