我正在尝试使用 TamperMonkey从该页面中删除一个 div。
此代码适用于 chrome DevTools 控制台
var elems = document.getElementsByClassName('hdn hdb-m hfl-m');
elems[0].parentNode.removeChild(elems[0]);
但不适用于 TamperMonkey
// ==UserScript==
// @name New Userscript
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match http://*/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
var elems = document.getElementsByClassName('hdn hdb-m hfl-m');
elems[0].parentNode.removeChild(elems[0]);
})();
我错过了什么?
我不能确切地说,但我有根据的猜测是,该网站在您的脚本执行后通过 JavaScript 生成其一些内容。默认情况下,tampermonkey 脚本在页面 HTML 被加载和解析时执行。但是大多数通过 JavaScript 生成页面的代码也是如此。因此,您可以在生成要删除的元素之前查看脚本如何运行。
最懒惰的解决方案是使用一些计时器来延迟执行,但是当您在超时后删除元素时,预计会出现丑陋的抽搐。例子:
更高级的方法是使用MutationObserver,它可以在页面发生更改时立即触发代码。您可以尝试一下,它的工作量更大,但更优雅。