2016-02-16 3 views
3

Я написал сценарий, который нажимает на ссылку, которая может скачать mp3-файл. Проблема я столкнулся, когда скрипт имитирует нажатие на эту ссылку, диалоговое окно загрузки выскакивает, как это:
Download Dialog BoxДиалог загрузки ручек в SlimerJS

Теперь я хочу, чтобы сохранить этот файл в какой-то путь по своему выбору и автоматизировать весь обработать. Я не знаю, как обращаться с этим диалоговым окном.

+0

Как вы управляете SlimerJS? Lite или полная версия? Какая операционная система? – Vaviloff

+0

Что именно вы подразумеваете под Lite или полной версией? Извините, я всего лишь новичок. Операционная система - Windows 8.1. –

+0

Использует ли SlimerJS существующую установку Firefox? – Vaviloff

ответ

0

Вот скрипт, адаптированный из this blog post, для загрузки файла.

В SlimerJS можно использовать response.body внутри обработчика onResourceReceived. Однако, чтобы предотвратить использование слишком большого объема памяти, по умолчанию он ничего не получает. Вы должны сначала установить page.captureContent, чтобы сказать, что хотите. Вы назначаете массив регулярных выражений на page.captureContent, чтобы указать, какие файлы должны получать. Регулярное выражение применяется к типу mime. В приведенном ниже примере кода я использую /.*/ для обозначения «получить все». Использование [/^image/.+$/] должны просто получить изображения и т.д.

var fs=require('fs'); 
var page = require('webpage').create(); 

fs.makeTree('contents'); 

page.captureContent = [ /.*/ ]; 

page.onResourceReceived = function(response) { 

    if(response.stage!="end" || !response.bodySize) 
    { 
     return; 
    } 

    var matches = response.url.match(/[/]([^/]+)$/); 
    var fname = "contents/"+matches[1]; 

    console.log("Saving "+response.bodySize+" bytes to "+fname); 
    fs.write(fname,response.body); 

    phantom.exit(); 
}; 

page.onResourceRequested = function(requestData, networkRequest) { 
    //console.log('Request (#' + requestData.id + '): ' + JSON.stringify(requestData)); 
}; 

page.open("http://....mp3", function(){ 

}); 
+0

Привет @Vaviloff благодарит за это предложение. Я пробовал этот код, но то, что он делает, это то, что он захватывает все htmls и js и изображения веб-сайта, но все же, что появляется окно загрузки. Есть ли способ, по умолчанию я могу выбрать некоторые параметры? –

0

Вы не можете контролировать диалоговое окно. SlimerJS не имеет API для этого действия.

+0

Можете ли вы сказать мне обходное решение или другую альтернативу, которую я могу попробовать? –

+0

Вы можете анализировать URL-адреса и загружать данные с помощью php или любой язык. Вы можете попробовать использовать Selenium. –

0

Firefox создает файл temp "downloadfile.extension.part", который содержит контент. Просто переименуйте файл ex. myfile.csv.part> myfile.csv

локально при работе на Mac, вы должны найти файл .part в каталоге загрузки, на Linux/TEMP/папку

Не самое элегантное решение, но необходимо сделать трюк

Смежные вопросы