如何找到匹配所有关键字的 html 元素?

How to find an html element that matches all keywords?

我正在为自己编写一个类似机器人的 chrome 扩展程序,其中一个功能是为特定 html 元素解析随机站点,该元素包含用户自定义提供的所有关键字订购并 .click() 它。这两样我都做不到。

我试了一下 jQuery 的 :contains 选择器,发现像下面提供的命令这样的命令仅适用于预定义数量的关键字。

至于.click()问题。出于某种原因,它在我的情况下不起作用。这对我来说看起来很奇怪,因为同时“.remove()”工作得很好。

这是我的“.js”文件,负责我要实现的目标:

$(document).ready(function() {
    console.log('ready');
    findItem();
});

function findItem() {
    chrome.storage.local.get("settings", function (data) {
        //var newWindow = window.open('SOME SITE URL', 'single');

    if (data.settings.keyWords) {
        
        //code piece that makes an array out of keywords string
        //stored in chrome storage and removes empty elements
        let pkString = data.settings.keyWords;
        const pkArr = pkString.split(", ");
        Object.keys(pkArr).forEach(pk => {
            if (pkArr[pk] == "") {
                pkArr.pop();
                console.log('popped');
            } else {
                console.log(`'${pkArr[pk]}'`);
            }
        });

        if (pkArr) {
            //i basically need something like that but for random amount of keywords
            $(`div:contains("${pkArr[0]}"):contains("${pkArr[1]}"):contains("${pkArr[2]}"):contains("${pkArr[3]}"):contains( ... )`).click();
        }
    }
};

您可以映射每个关键字并将其组合成一个选择器,如下所示:

$(`div${pkArr.map(keyword => `:contains("${keyword}")`).join('')}`).click();

您可能还想检查 pkArr 中是否至少有 1 个元素,否则它将匹配页面上的所有 <div/> 个元素。

至于click()部分,这可能是由多种原因造成的。该元素不是正确的元素,或者它没有附加点击事件侦听器。不太确定,但浏览器也可以阻止它。