如何自动按页面加载上的特定按钮?

时间:2018-07-10 17:19:18

标签: javascript google-chrome automation userscripts tampermonkey

我正在尝试找到一种方法,通过Tampermonkey中用Javascript编写的用户脚本,在加载特定页面时单击特定按钮(即href)。看起来很简单,但是经过多次迭代,我没有任何代码可以工作。

这是我要按下的href和按钮的完整源代码:

<span data-react-class="require('reactComponents/workPipeline/SubmitAcceptTaskForm')['SubmitAcceptTaskFormLink']" data-react-props="{&quot;text&quot;:&quot;accept&quot;,&quot;refTag&quot;:&quot;w_wp_acpt_warning&quot;}"><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(鼠标悬停在必要的“接受”按钮上):

enter image description here

我不太确定自己在做什么错。我以为我尝试过的其中几行代码会行得通,但是就语法而言,我可能忽略了一些东西。任何和所有帮助将不胜感激。白天和黑夜都美好。

2 个答案:

答案 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="{&quot;text&quot;:&quot;accept&quot;,&quot;refTag&quot;:&quot;w_wp_acpt_warning&quot;}"><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();