console.log() 未在间隔内记录到控制台

console.log() not logging to console inside interval

我翻阅了无数次 post,但似乎无法找到我的问题的答案。

我的间隔中有一个 console.log 表达式。当控制台中的代码为 运行 时,它会完美执行,但拒绝 console.log 我的字符串通知客户端用户脚本正在运行。

这是我的代码和注释:

let likes = 0;

setInterval(() => {
    const likeButton = document.querySelector('svg[aria-label="Like"]');
    const nextButton = document.querySelector('svg[aria-label="Next"]');
    if (likeButton) {
        likeButton.parentNode.parentElement.click()
        likes++;
        console.log(`You've liked ${likes} post(s)`); 
    }
    nextButton.parentElement.parentNode.click();
}, 20000);

从我在 Instagram 上看过的一些 post 的 inspect source 来看,点赞按钮似乎有两种状态。

  • <svg aria-label="Like" /> 当 post 还没有被点赞时。
  • <svg aria-label="Unlike" /> 当 post 已经被你点赞了。

问题是 const likeButton = document.querySelector('svg[aria-label="Like"]'); 将整个元素作为对象返回,而不是 true/false 值,因此 if (likeButton) { 永远不会为真,但正如@Unmitigated 指出的那样它可以是“真实的”。要确定按钮是否已被单击并消除任何“真正的摆动空间”,您需要查看 likeButton 元素上的属性。您可以为此使用 getAttribute()。

let likes = 0;

setInterval(() => {
    const likeButton = document.querySelector('svg[aria-label="Like"]');
    const nextButton = document.querySelector('svg[aria-label="Next"]');
    if (likeButton.getAttribute("aria-label") === "Like")) {
        likeButton.parentNode.parentElement.click();
        likes++;
        console.log(`You've liked ${likes} post(s)`); 
    }
    nextButton.parentElement.parentNode.click();
}, 20000);