【问题标题】:How can I make a Greasemonkey script to auto-download a file? [duplicate]如何制作 Greasemonkey 脚本来自动下载文件? [复制]
【发布时间】:2011-11-25 19:12:41
【问题描述】:

我转到该页面,它有 1 个 zip 文件,但我不知道名称,除了 .zip

我想让 Greasemonkey 自动下载这个 zip,也许使用 flashgot 或其他什么?

所以我需要它在页面加载时激活,然后查找*.zip,并自动将其添加到下载中。

有什么想法吗?

【问题讨论】:

    标签: javascript greasemonkey download


    【解决方案1】:

    Greasemonkey 本身无法自动将 zip 文件或其他任何内容保存到本地文件系统。
    这是设计使然;允许用户/页面 JavaScript 保存文件是一种已证明的安全灾难。

    您的选择:

    1. 让 Greasemonkey 选择正确的链接并打开“文件保存”对话框(节省您的搜索工作并单击 1 次)。
    2. 让 GM 将 zip 文件中继到您自己的服务器。然后,您的服务器应用程序可以自动保存文件。
      请注意,“服务器”可以是您自己的机器,运行类似 XAMPP 的东西。
    3. 写信your own Firefox Add-on


    选项 1,仅限 GM:

    GM 可以做的是弹出文件-保存对话框以获取正确的文件:

    仍然需要用户交互,只要单击一下即可。

    例如,假设页面包含此链接:

    <a href="http://Suspicious.com/TotallyOwnYourBankAndCreditCardAccounts.zip">
        Click me, sucka!
    </a>
    

    然后这段代码将为它打开文件保存对话框:

    var clickEvent      = document.createEvent ('MouseEvents');
    var firstZipFile    = document.querySelector ("a[href*='.zip']");
    
    clickEvent.initEvent ('click', true, true);
    firstZipFile.dispatchEvent (clickEvent);
    


    选项 2,GM 和你自己的服务器应用程序:

    Greasemonkey 可以使用GM_xmlhttpRequest() 将文件发送到您的网络应用程序——您必须自己编写。然后,Web 应用程序可以自动将文件保存到服务器。您可以将本地计算机设置为服务器。

    有关此方法的更多帮助,请read this,然后提出一个新问题。


    选项3,编写自己的FF扩展(插件):

    如果您决定采用 Firefox 插件路线,请参阅 "MDN: Downloading files"

    有关此方法的更多帮助,请read this,然后提出一个新问题。

    【讨论】:

      【解决方案2】:

      这是我在 greasmonkey 中使用的代码,用于从@include 语句中 url 提供的位置下载 zip 文件。

      // ==UserScript==    
      // @name        zipexport    
      // @namespace   refresh page    
      // @include     https://control.com/export.php    
      // @version     1    
      // @grant       none    
      // ==/UserScript==    
      
      var timerVar= setInterval(function() {DoMeEverySecond (); }, 60000);    
      
      function DoMeEverySecond ()    
      {    
        setInterval('window.location.reload()',10000);    
      
       $(document).ready(function()    
      {    
      
       setTimeout(function(){    
      
      document.getElementsByClassName("btn btn-lg btn-primary")[0].click();
      }, 1000);});    
      
      
      }    
      

      要了解一些想法,请通过这个..

      // @include     https://control.com/export.php 
      

      在此处使用源页面的链接

      setInterval(function() {DoMeEverySecond (); }, 60000);
      

      帮助你调用函数DoMeEverySecond(); 60000ms(60s=1min)后

      setInterval('window.location.reload()',10000);
      

      用于每 10 秒重新加载一次页面。我使用它只是为了确保网页更新到最新状态(我有一个文件要下载,每小时更新一次)。如果您不需要,您可以避免。

      $(document).ready(function()
      

      如果我们使用这个语句,function()只有在完全重新加载网页后才会被调用。

      document.getElementsByClassName("btn btn-lg btn-primary")[0].click();
      

      getElementsByClassName/getElementsById 等可以在此处使用,具体取决于可以指向您要下载的文件的内容(通过在源页面中右键单击来使用检查元素,以了解哪个类/id 是否可以指向您的 zip 文件) .

      [0] 如果您在同一个类中有多个要调用的变量,可能会对您有所帮助。

      click()
      

      在指定的元素上执行鼠标点击。(这应该有助于下载文件)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-19
        • 1970-01-01
        • 2013-10-04
        相关资源
        最近更新 更多