如何用UserScript实现Danbooru页面加载时自动下载图片?
解决Danbooru帖子页自动下载图片的UserScript问题
问题分析
你遇到的核心问题大概率是代码执行时机过早,页面DOM还没完全渲染(尤其是Danbooru的下载按钮属于动态加载元素),导致document.querySelector找不到目标元素,自然无法触发点击。另外你尝试的部分选择器也存在错误,比如button[data-id="#post-option-download"]并非正确的元素定位方式。
解决方案
下面提供两种可靠的实现方式,任选其一即可:
方式1:模拟人工操作触发下载按钮
这种方式贴合页面原生交互逻辑,先展开选项菜单再触发下载:
// ==UserScript== // @name Danbooru Auto Download // @namespace DanbooruAutoDownload // @version 0.1 // @description Auto download image on Danbooru post page // @author Your Name // @match https://danbooru.donmai.us/posts/* // @icon none // @grant none // ==/UserScript== (function() { 'use strict'; // 等待页面核心DOM加载完成 document.addEventListener('DOMContentLoaded', () => { // 先点击打开帖子选项菜单(下载按钮默认隐藏在菜单内) const optionsBtn = document.querySelector('#post-options-button'); if (optionsBtn) { optionsBtn.click(); // 短暂延迟确保下载按钮渲染完成 setTimeout(() => { const downloadBtn = document.querySelector('#post-option-download'); if (downloadBtn) { downloadBtn.click(); // 可选:下载后关闭选项菜单 optionsBtn.click(); } }, 300); } }); })();
方式2:直接提取原图URL触发下载(更稳定)
跳过页面UI交互,直接获取原图地址创建下载链接,不受页面结构变化影响:
// ==UserScript== // @name Danbooru Auto Download Direct // @namespace DanbooruAutoDownloadDirect // @version 0.1 // @description Auto download image directly on Danbooru post page // @author Your Name // @match https://danbooru.donmai.us/posts/* // @icon none // @grant none // ==/UserScript== (function() { 'use strict'; document.addEventListener('DOMContentLoaded', () => { // 获取页面中的原图元素 const imgElement = document.querySelector('#image'); if (imgElement) { const imgUrl = imgElement.src; // 创建隐藏的下载链接 const downloadLink = document.createElement('a'); downloadLink.href = imgUrl; // 从URL中提取文件名 downloadLink.download = imgUrl.split('/').pop(); // 自动触发下载 downloadLink.click(); } }); })();
关键说明
DOMContentLoaded事件确保代码在页面核心内容加载完成后执行,避免出现找不到元素的情况- 方式1完全模拟人工操作,适合需要保留页面交互逻辑的场景;方式2更简洁稳定,不受UI结构变更影响
内容的提问来源于stack exchange,提问作者AnimeRaupe
相关产品推荐
相关产品推荐

