油猴脚本——先判断文本内容

有时候,一些签到按钮,签到完成之后是依然可以点击的。如果只是用 id 来获取到元素,然后点击,就会导致明明签到完成了,还继续点击按钮。

此时我们可以加入一个判断条件。看来还是得拿个实际例子,王者荣耀 - 虾哥论坛

这个网站,我们没有账号也可以访问,我们可以看到它有一个「签到」按钮。

<a href="javascript:to_sign(fid, uid)" class="checkin-btn follow-show" id="checkin-btn"><span>签到</span></a>

由于它有 id ,所以获取起来很简单

document.getElementById('checkin-btn')

我有这个论坛的账号,我知道点击之后,按钮的文字,会从签到 变成 已签到

那么我们要做的就是,在执行点击之前,判断一下,里面的文字是否 签到

// ==UserScript==
// @name 王者荣耀-虾哥-点击签到
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author Powersee
// @match https://xiage.yy.com/forum-234-1.html
// @icon https://www.google.com/s2/favicons?sz=64&domain=yy.com
// @grant none
// ==/UserScript==

(function() {
'use strict';
window.addEventListener('load', function() {
const btn = document.getElementById('checkin-btn');
if (btn.textContent == '签到') btn.click()
}, false);
})();

完整的代码如下,我发现用 // @run-at document-idle 似乎有些问题,所以改成了事件监听。

有些签到按钮,点击之后文字就会发生变化。

签到前 签到后
签到 已签到
签到 已签

像这种我们可以直接用 == 来判断里面的字符串,但是有的时候,我们想要的是,判断里面的文字,是否包含某些字符串。

例如,有些网站,它的签到按钮文字是 领取今日的登录奖励

我们可以用 includes() 方法来判断。

if (btn.textContent.includes('领取今日')) btn.click()

这行代码,就是判断是否包含 领取今日 这几个字,如果是,就点击。