如何找到匹配所有关键字的 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()
部分,这可能是由多种原因造成的。该元素不是正确的元素,或者它没有附加点击事件侦听器。不太确定,但浏览器也可以阻止它。
我正在为自己编写一个类似机器人的 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()
部分,这可能是由多种原因造成的。该元素不是正确的元素,或者它没有附加点击事件侦听器。不太确定,但浏览器也可以阻止它。