Selenium: разрешить доступ XPCOM и записывать в файл из Javascript в Firefox - PullRequest
3 голосов
/ 06 августа 2011

В этом вопросе есть пример того, как запросить доступ к XPCOM из Javascript:

Как создать файл с использованием JavaScript в Mozilla Firefox

 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

Iя надеялся найти способ включить доступ XPCOM аналогичным образом для моих тестовых сценариев Selenium, чтобы Javascript мог напрямую записывать данные изображений RAW в файл.Это фактически продолжает мои предыдущие вопросы о том, как извлекать пиксельные данные оптимизированным способом:

Firefox, Selenium, toDataURL, Uint8ClampedArray и Python

Чего я надеюсь достичь

  • Включить доступ XPCOM для Javascript, запускаемых через Selenium

  • Рендеринг изображения на холсте

  • Чтение пикселей холстакак необработанные данные изображения (общедоступный API должен быть доступен на самом холсте)

  • Запись данных изображения RAW в файл с использованием интерфейсов XPCOM в известном месте пути

Примечание: кодировка PNG и т. Д. Недопустима.Это должны быть необработанные данные для скорости, так как они будут напрямую передаваться в видео кодировку

Ответы [ 2 ]

3 голосов
/ 29 августа 2011

Мне кажется, что этот блог - это то, что вы ищете:

Сохранение в локальных файлах с XPCOM для Selenium Firefox Chrome

function saveFile(fileName, val){
   try {
      netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
   } catch (e) {
      //alert("Permission to save file was denied.");
   }
   var file = Components.classes["@mozilla.org/file/local;1"]
             .createInstance(Components.interfaces.nsILocalFile);
   file.initWithPath(fileName);
   if (file.exists() == false) {
     //alert("Creating file... " );
     file.create( Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 420 );
   }
   var outputStream = Components.classes["@mozilla.org/network/file-output-stream;1"]
            .createInstance(Components.interfaces.nsIFileOutputStream);
   outputStream.init( file, 0x04 | 0x08 | 0x20, 420, 0 ); 
   //UTF-8 convert
   var uc = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]
     .createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
   uc.charset = "UTF-8";
   var data_stream = uc.ConvertFromUnicode(val);
   var result = outputStream.write(data_stream, data_stream.length );
   outputStream.close(); 
}

Вам придется адаптировать его к вашей ситуации (RAW тип данных), но это в основном все!

0 голосов
/ 06 августа 2011

Я мало что знаю о Selenium, но ЕСЛИ вы можете установить расширение на версию Firefox, которая будет запускать страницу, вы можете вставить свой собственный скрипт в страницу при ее загрузке.Смотрите этот SO ответ

...