如何制作Greasemonkey脚本来自动下载文件?

时间:2011-11-25 19:12:42

标签: javascript greasemonkey downloading

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

我希望Greasemonkey自动下载此zip文件,也许使用flashgot或其他东西?

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

有什么想法吗?

2 个答案:

答案 0 :(得分:13)

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

您的选择:

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

  5. 选项1,仅限GM:

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

    Windows, File-Save dialog

    如果只需点击一次,仍然需要用户互动。

    例如,假设该页面包含以下链接:

    <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然后提出一个新问题。

答案 1 :(得分:0)

这是我在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等基于可以指向您要下载的文件的内容(通过在源页面中右键单击使用inspect元素来了解哪个类/ id可以指向您的zip文件) 。

如果您在同一个班级下调用多个变量,

[0]可能会有所帮助。

click()

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