Tampermonkey是Google Chrome,Microsoft Edge,Safari,Opera Next和Firefox的用户经理。 Tampermonkey脚本是特权javascript,可以访问自定义API,允许您自定义网页的外观和行为方式。
我编写了一个小用户脚本,它最初仅适用于一个网页,现在我添加了更多功能,我尝试让脚本在多个站点上工作,据我所知,我必须从
Tampermonkey js/jquery/ajax 如何添加睡眠? [已关闭]
对于像这样的页面 https://www.converto.io/?v=EbuYMynCWV8, 我有一个 Tampermonkey 脚本可以自动执行: 选择mp4格式 单击转换按钮。 它可以工作,但有时可能太快了......
我有这样的问题,例如如何从一个网址获取信息并在另一个网址中使用它 // ==用户脚本== // @name 测试 // @description 尝试接管世界! // @au...
我尝试制作一个 Tampermonkey 用户脚本,在图片显示时自动单击图片
网站上有一个与万圣节相关的游戏。在游戏中,您必须点击随机出现的图片才能赚取积分。我想知道是否有人可以帮助我为 Tampermonke 创建 JavaScript...
我正在使用 Jquery 和 Jquery-UI 1.7.2。代码本身是一个 tampermonkey 脚本,其中已经编写了 GM_setValue 和 GM_getValue 所需的授权。有问题的代码部分是...
我有以下脚本来自动跟随Google图像搜索结果中的IFRAME: // ==用户脚本== // @name 在 Google 图片搜索中关注 IFRAME // @命名空间 http://
我正在尝试阻止阻止 YouTube 发出的特定 GET 请求。单击搜索栏时,将执行对 https://suggestqueries-clients6.youtube.com/complete/search?... 的 GET 请求,wh...
阻止网站使用 tampermonkey 发出的特定 GET 请求?
我试图阻止 youtube.com 发出特定的 GET 请求。 单击搜索栏时,会发送 GET 请求 https://suggestqueries-clients6.youtube.com/complete/search?...正在执行...
如何在不访问有问题的浏览器页面的情况下调试“不是有效的选择器”
我在工作中(在 Chrome 中)制作了一个 TamperScript,它从网页收集元素列表。该脚本被很多人使用,没有错误。但在一个人的工作站上,它失败并出现错误:
我尝试通过 Tampermonkey 使用用户脚本来播放音频文件,但由于某种原因,当我尝试运行代码并且音频文件未播放时,我在控制台中收到此错误:
有没有一种方法可以在没有 Service Worker 的情况下缓存音频元素请求?
我有一个用户脚本,我想在其中缓存音频元素中的音频文件。 fetch() 在这里不可行,因为我必须等待它获取才能从中获取 blob。有没有办法使用音频电子...
使用 GM_xmlhttpRequest 在 Chrome 上 POST 数据?
我正在编写一个用户脚本来从页面获取图像并将其上传到服务器。 该脚本在 FF(Greasemonkey 和 Scriptish)中运行良好,但是当我使用 Chrome(使用 Tampermonkey 或 Ninjakit)时,它
我制作了包含按钮的单个选项卡。 在此输入图像描述 // 创建选项卡内容 const tabContent = document.createElement('div'); // 为每个选项卡添加您想要的内容
Google 表格:使用键盘快捷键将选定的单元格复制为 CSV
我经常需要从 Google 表格复制选定的单元格并将其粘贴为 CSV。我想添加 Cmd+Shift+C (macOS) 或 Ctrl+Shift+C (Windows) 等键盘快捷键,将所选单元格复制为...
我一直在尝试按照互联网建议的所有不同方式在公共 DHL 表单上设置输入值,但它不起作用。 我已经尝试了许多关于这个主题的 Stack Overflow 答案,但是......
我有这个tampermonkey脚本,可以检测一个单词,如果没有找到它就刷新网页,它工作得很好,但我希望它检测多个单词而不仅仅是一个,如果它没有找到任何.. .
我有一个问题困扰了一段时间,抱歉在论坛上发了一些垃圾邮件。 有什么方法可以通过元素的文本内容获取元素吗?这是一个例子: 我有一个问题困扰了一段时间,很抱歉在论坛上发了一些垃圾邮件。 有什么方法可以通过元素的文本内容获取元素吗?这是一个例子: <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); }
所以我要将我的 Tampermonkey 用户脚本(这是一个让您访问列表中的随机链接的按钮)发布到 Chrome Web Store,我今天一直在测试它,但出现了错误: 未捕获的类型错误...
我正在玩浏览器游戏,我遇到了这个脚本,但它不适合我想要的用途。 通常这个脚本只运行一次,并且不在 tampermonkey 上运行。脚本本身的工作方式如下
在文档启动处运行 Tampermonkey 用户脚本在 Firefox 上的加载时间比在 Edge 上晚
我有一个 Tampermonkey 用户脚本,我想用它来防止加载某些脚本。为此,我有一个 MutationObserver,当脚本出现时,我 .remove() 它们。这适用于...