tampermonkey 相关问题

Tampermonkey是Google Chrome,Microsoft Edge,Safari,Opera Next和Firefox的用户经理。 Tampermonkey脚本是特权javascript,可以访问自定义API,允许您自定义网页的外观和行为方式。

如何在不访问有问题的浏览器页面的情况下调试“不是有效的选择器”

我在工作中(在 Chrome 中)制作了一个 TamperScript,它从网页收集元素列表。该脚本被很多人使用,没有错误。但在一个人的工作站上,它失败并出现错误:

回答 1 投票 0

音频文件未在 tampermoney 中使用用户脚本播放

我尝试通过 Tampermonkey 使用用户脚本来播放音频文件,但由于某种原因,当我尝试运行代码并且音频文件未播放时,我在控制台中收到此错误:

回答 2 投票 0

有没有一种方法可以在没有 Service Worker 的情况下缓存音频元素请求?

我有一个用户脚本,我想在其中缓存音频元素中的音频文件。 fetch() 在这里不可行,因为我必须等待它获取才能从中获取 blob。有没有办法使用音频电子...

回答 1 投票 0

使用 GM_xmlhttpRequest 在 Chrome 上 POST 数据?

我正在编写一个用户脚本来从页面获取图像并将其上传到服务器。 该脚本在 FF(Greasemonkey 和 Scriptish)中运行良好,但是当我使用 Chrome(使用 Tampermonkey 或 Ninjakit)时,它

回答 2 投票 0

选项卡中没有按钮单击事件(Tampermonkey)

我制作了包含按钮的单个选项卡。 在此输入图像描述 // 创建选项卡内容 const tabContent = document.createElement('div'); // 为每个选项卡添加您想要的内容

回答 1 投票 0

Google 表格:使用键盘快捷键将选定的单元格复制为 CSV

我经常需要从 Google 表格复制选定的单元格并将其粘贴为 CSV。我想添加 Cmd+Shift+C (macOS) 或 Ctrl+Shift+C (Windows) 等键盘快捷键,将所选单元格复制为...

回答 1 投票 0

无法设置输入文本表单字段的值

我一直在尝试按照互联网建议的所有不同方式在公共 DHL 表单上设置输入值,但它不起作用。 我已经尝试了许多关于这个主题的 Stack Overflow 答案,但是......

回答 1 投票 0

我希望脚本使用 tampermonkey 检测多个单词

我有这个tampermonkey脚本,可以检测一个单词,如果没有找到它就刷新网页,它工作得很好,但我希望它检测多个单词而不仅仅是一个,如果它没有找到任何.. .

回答 1 投票 0

有没有办法通过文本内容获取元素?

我有一个问题困扰了一段时间,抱歉在论坛上发了一些垃圾邮件。 有什么方法可以通过元素的文本内容获取元素吗?这是一个例子: 我有一个问题困扰了一段时间,很抱歉在论坛上发了一些垃圾邮件。 有什么方法可以通过元素的文本内容获取元素吗?这是一个例子: <span id="result_5_name" class="market_listing_item_name" style="color: #FFD700;">Item | Anodized Navy</span> 我试图通过文本内容“Item | ”来获取元素阳极氧化海军蓝'。 是否可以做类似的事情: function getelem { var item = document.getElementsByTextContent('Item | Anodized Navy'); item[0].click(); } 我知道这并不存在,但这只是为了让你明白这个想法。另外,我无法通过 Id 或类名使用,并且无法更改元素的 HTML 代码,因此必须使用文本内容来完成,我没有看到其他方法。 我非常感谢任何反馈, 谢谢! 尽管 jQuery 公开了 :contains 伪选择器,但明智的做法是首先在可能的情况下使用类来限制结果: $('.market_listing_item_name:contains("Item | Anodized Navy")') 缩小要搜索的初始标签集可以提高性能,否则将考虑所有标签;此外,重叠的标签也会匹配。 在更现代的浏览器上,您可以考虑这一点,基于这个答案: function contains(selector, text) { var elements = document.querySelectorAll(selector); return [].filter.call(elements, function(element) { var contents = element.textContent || element.innerText || ''; return contents.indexOf(text) != -1; }); } var items = contains('.market_listing_item_name', 'Item | Anodized Navy') items[0] && items[0].click(); 好吧,既然您用 jquery 标记了问题,您可以使用 :contains 选择器: var item = $(':contains(Item | Anodized Navy)'); 但请注意,这将返回包含该文本的 every 元素,包括 span 和跨度的所有父元素。如果您只想获取最里面的元素(假设只有一个),只需获取最后一项,如下所示: var item = $(':contains(Item | Anodized Navy)').last(); 要使用 jQuery 实现等效的 without,你必须实现这样的函数: function getElementsByText(text) { var spans = document.getElementsByTagName('span'), results = []; for(var i = 0; i < spans.length; i++) { var content = spans[i].textContent || spans[i].innerText || ''; if (content.indexOf(text) != -1) results.push(spans[i]); } return results; } 或者可能像这样,具体取决于您需要什么: function getElementsByText(text) { function rec(ele, arr) { if (ele.childNodes.length > 0) for (var i = 0; i < ele.childNodes.length; i++) rec(ele.childNodes[i], arr); else if (ele.nodeType == Node.TEXT_NODE && ele.nodeValue.indexOf(text) != -1) arr.push(ele.parentNode); return arr; } return rec(document.body, []); } 然后像这样调用这个函数: var item = getElementsByText('Item | Anodized Navy'); 另请注意,在您的代码中,getelem需要在函数名称后面有(),如下所示: function getelem() { var item = getElementsByText('Item | Anodized Navy'); ... } 也许我回答这个问题晚了,但我没有看到用 JQuery 标记的问题,所以这里有一个纯 JavaScript 解决方案: var myID = getElementsByTextContent('Item | Anodized Navy'); function getElementsByTextContent (elText){ var spanID; var allSpans = document.getElementsByTagName("span"); for (var i = 0; i < allSpans.length; i++) { var spanText = allSpans[i].innerHTML; if(spanText == elText ){ spanID = allSpans[i].id; } } return spanID; } 你想要这样的东西 HTML <span id="result_5_name" class="market_listing_item_name" style="color: #FFD700;">Item | Anodized Blue</span> <span id="result_6_name" class="market_listing_item_name" style="color: #FFD700;">Item | Anodized Navy</span> <span id="result_7_name" class="market_listing_item_name" style="color: #FFD700;">Item | Anodized Red</span> <span id="result_8_name" class="market_listing_item_name" style="color: #FFD700;">Item | Anodized Green</span> <span id="result_9_name" class="market_listing_item_name" style="color: #FFD700;">Item | Anodized Navy</span> Javascript function walkTheDOM(node, func) { func(node); node = node.firstChild; while (node) { walkTheDOM(node, func); node = node.nextSibling; } } function getElementsByText(node, text) { var results = []; walkTheDOM(node, function (currentNode) { if (currentNode.nodeType === 3 && currentNode.nodeValue === text) { results.push(currentNode.parentNode); } }); return results; } console.log(getElementsByText(document, 'Item | Anodized Navy')); 输出 [span#result_6_name.market_listing_item_name, span#result_9_name.market_listing_item_name] 在 jsFiddle 额外 1,正如我们所讨论的 treeWalker function getElementsByText(node, text) { var results = [], treeWalker = document.createTreeWalker( node, NodeFilter.SHOW_TEXT, { acceptNode: function (node) { return NodeFilter.FILTER_ACCEPT; } }, false); while (treeWalker.nextNode()) { if (treeWalker.currentNode.nodeValue === text) { results.push(treeWalker.currentNode.parentNode); } } return results; } console.log(getElementsByText(document, 'Item | Anodized Navy')); 在 jsFiddle 另外 2,正如我们所讨论的 getElementsByTagName('*') function getElementsByText(node, text) { var results = [], tags = node.getElementsByTagName('*'), tagsLength = tags.length, tagsIndex, currentTag, childNodes, childNodesLength, ChildNodesIndex, currentChildNode; for (tagsIndex = 0; tagsIndex < tagsLength; tagsIndex += 1) { currentTag = tags[tagsIndex]; childNodes = currentTag.childNodes; childNodesLength = childNodes.length; for (ChildNodesIndex = 0; ChildNodesIndex < childNodesLength; ChildNodesIndex += 1) { currentChildNode = childNodes[ChildNodesIndex]; if (currentChildNode.nodeType === 3 && currentChildNode.nodeValue === text) { results.push(currentTag); } } } return results; } console.log(getElementsByText(document, 'Item | Anodized Navy')); 在 jsFiddle 请注意,这些解决方案是相同的,但与此处给出的所有 contains 解决方案不同。因为这些解决方案实际上为您提供了具有匹配文本节点作为子节点的节点。我使用的简单标记并未证明这一点,但当标记高度嵌套时,您很快就会注意到差异。 最后这是这 3 个解决方案的 jsPerf。 您可以简单地使用Jquery的:contains() 如果要选择包含文本“mytext”的所有范围,请使用 var elements=$('span:contains("mytext")); 如果对您有帮助,请标记为答案。 谢谢你:) 对于我的用例,我编写了一些简单的版本。 :not(has(*))对于防止父母的出现很有用。 function getElementsByText(root, text, selector = 'div:not(:has(*))') { const els = [...root.querySelectorAll(selector)]; return els.filter(el => el.innerText == text); }

回答 6 投票 0

$ 不是 Chrome 扩展程序中的有效函数?

所以我要将我的 Tampermonkey 用户脚本(这是一个让您访问列表中的随机链接的按钮)发布到 Chrome Web Store,我今天一直在测试它,但出现了错误: 未捕获的类型错误...

回答 2 投票 0

Tampermonkey - 刷新后跟踪迭代

我正在玩浏览器游戏,我遇到了这个脚本,但它不适合我想要的用途。 通常这个脚本只运行一次,并且不在 tampermonkey 上运行。脚本本身的工作方式如下

回答 2 投票 0

在文档启动处运行 Tampermonkey 用户脚本在 Firefox 上的加载时间比在 Edge 上晚

我有一个 Tampermonkey 用户脚本,我想用它来防止加载某些脚本。为此,我有一个 MutationObserver,当脚本出现时,我 .remove() 它们。这适用于...

回答 1 投票 0

如何使用 Tampermonkey 覆盖 JavaScript 中的匿名函数?

我有一个函数想要用 Tampermonkey 在匿名函数中重写。 (()=>{ /* 函数在这里 */ })(); 如何拦截更改代码? 我发现我可以使用 puppeteer 来做到这一点

回答 1 投票 0

为什么使用 lodash 或下划线的网站在 Opera 中不起作用?

无论出于什么原因,Opera 的一些更新让我沮丧了大约一周,现在我试图找出为什么 Opera 不再在我的生产力网站上运行 - 比如 StreamTime 或 Elementor...

回答 1 投票 0

如何从两个不同的 TamperMonkey 脚本访问相同的 JSON 文件?

我有两个 TamperMonkey 脚本,每个脚本在同一网站的不同页面上运行以执行库存管理任务(对于任何熟悉 Neopets 的人来说,一个脚本在 Safety Depo 上运行...

回答 1 投票 0

为什么我的 Tampermonkey 脚本没有在某些网站上运行,尽管脚本中没有错误

我编写了一个在 Tampermonkey 中运行的脚本。在大多数网站上,一个简单的 $("#loginLink")[0].click();网站加载后将立即单击该链接。但在某些方面,即使我使用 $(文档...

回答 1 投票 0

在 TamperMonkey 中使用正则表达式提取匹配组

我正在尝试编写一个 TamperMonkey 用户脚本,提取与特定模式匹配的 URL,访问这些页面,从这些页面中提取一条信息,然后更新 eac 的链接...

回答 1 投票 0

如何让用户脚本从私有域/github自动更新?

我正在为 Tampermonkey 开发一个用户脚本并将其存储在属于我公司的私人 Github 上。我无法将代码上传到公共服务器上。脚本的自动更新功能不...

回答 2 投票 0

我的脚本可以在 chrome 控制台上运行,但不能在 TamperMonkey 中运行

目前我正在编写一个添加两个按钮的脚本:一个显示“Office 2013”,另一个显示“Office 2019”。当我进入 Chrome Inspect =>

回答 1 投票 0

“屏幕锁定键”Tampermonkey 脚本的问题

我想创建一个 Tampermonkey 脚本,在浏览器屏幕的左侧放置一个钥匙形的锁。只有点击该键才能与屏幕的其他区域进行交互。否则...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.