You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 09:57:55