[Сделано] Сохранение Local Storage



  • Приветствую! Можно ли сохранить Local Storage в BAS???



  • @ezotonal
    Да, можно

    0_1471946173597_LocalStorage.png

    Но после перезагрузки браузера объекты, которые там хранятся будут очищены.



  • @support Можете сказать как сохранить? И как я понял потом уже загрузить не получится?



  • @ezotonal Можно будет и сохранять и загружать по аналогии с куки. Версия с этим функционалом будет завтра вечером.



  • @ezotonal Сделал. Нужно скачать эту версию:
    https://bablosoft.com/distr/BrowserAutomationStudioDevelopment/15.2.0/BrowserAutomationStudioInstallAllInOne.exe
    И просто использовать действия "Сохранить cookies" и "Загрузить cookies" как показано здесь:
    http://wiki.bablosoft.com/doku.php?id=ru:how_to_work_with_cookies



  • Может стоит вернуть функционал, не хватает иногда очень сильно из коробки работа с Local Storage



  • @biohacker01 said in [Сделано] Сохранение Local Storage:

    Может стоит вернуть функционал, не хватает иногда очень сильно из коробки работа с Local Storage

    Чегось?



  • @Fox что бы было сохранить/загрузить Local Storage
    или хотя бы как раньше через сохранить куки



  • @biohacker01 said in [Сделано] Сохранение Local Storage:

    @Fox что бы было сохранить/загрузить Local Storage
    или хотя бы как раньше через сохранить куки

    А вы проверяли работу Local Storage в BAS перед тем как написать на форуме?



  • @Fox Думая речь не о том что локал сторадж не сохраняется сейчас в профиль - а в том что часто вообще целесообразно не использовать постоянный профиль. А для этого очень было бы удобно иметь готовые кнопки - сохранить локал сторадж/загрузить локал сторадж, так же как есть возможность работы с куками. Надеюсь понятно объяснил ?



  • GPT по быстрому накидал функций:

    Сохранить:

    javascript
    function saveLocalStorageToFile() {
      // Get all keys from local storage
      const keys = Object.keys(localStorage);
      
      // Create an object to store key-value pairs
      const data = {};
      
      // Loop through each key and add its value to the object
      keys.forEach(key => {
        data[key] = localStorage.getItem(key);
      });
      
      // Convert the object to JSON string
      const jsonString = JSON.stringify(data);
      
      // Create a new blob with the JSON string as its content
      const blob = new Blob([jsonString], {type: 'application/json'});
      
      // Create a link element to download the file
      const url = URL.createObjectURL(blob);
      const link = document.createElement('a');
      link.href = url;
      link.download = 'local-storage.json';
      
      // Click the link to start the download
      document.body.appendChild(link);
      link.click();
      
      // Clean up by removing the link and revoking the URL object
      document.body.removeChild(link);
      URL.revokeObjectURL(url);
    }
    
    // Call the function to save local storage to a file
    saveLocalStorageToFile();
    

    Загрузить

    function loadLocalStorageFromFile(file) {
      // Create a new FileReader object
      const reader = new FileReader();
      
      // Set a callback function for when the file is loaded
      reader.onload = () => {
        try {
          // Parse the JSON string into an object
          const data = JSON.parse(reader.result);
          
          // Loop through each key-value pair and add it to local storage
          Object.keys(data).forEach(key => {
            localStorage.setItem(key, data[key]);
          });
          
          // Display a success message
          console.log('Local storage has been updated.');
        } catch (error) {
          console.error(error);
        }
      };
      
      // Read the file as text
      reader.readAsText(file);
    }
    
    // Usage example: Load a file when the user selects it using an input element
    const inputElement = document.createElement('input');
    inputElement.type = 'file';
    inputElement.addEventListener('change', event => {
      const file = event.target.files[0];
      loadLocalStorageFromFile(file);
    });
    document.body.appendChild(inputElement);
    

    Надо будет в модуль завернуть ...



  • @DuckDuck said in [Сделано] Сохранение Local Storage:

    @Fox Думая речь не о том что локал сторадж не сохраняется сейчас в профиль - а в том что часто вообще целесообразно не использовать постоянный профиль. А для этого очень было бы удобно иметь готовые кнопки - сохранить локал сторадж/загрузить локал сторадж, так же как есть возможность работы с куками. Надеюсь понятно объяснил ?

    Это же обычный объект, сохраните его любым удобным способом в переменную, а затем загрузите



  • @DuckDuck На сколько знаю, все эти костыли загрузят все данные для текущего домена на котором открыта вкладка, а не в базу браузера.
    И тут или открывать сначала без данных сайт, и палиться.
    Или костыль ввиде блокировки нужного сайта потом переход на него и загрузка данных, и разблокировка.
    А если таких сайтов сотни, то беда.

    По этому нужно нормальное встроенное решение от BAS.



  • @DuckDuck said in [Сделано] Сохранение Local Storage:

    GPT по быстрому накидал функций:
    Надо будет в модуль завернуть ...

    Вы точно знаете, что делает этот код?



  • @biohacker01 said in [Сделано] Сохранение Local Storage:

    @DuckDuck На сколько знаю, все эти костыли загрузят все данные для текущего домена на котором открыта вкладка, а не в базу браузера.
    И тут или открывать сначала без данных сайт, и палиться.
    Или костыль ввиде блокировки нужного сайта потом переход на него и загрузка данных, и разблокировка.
    А если таких сайтов сотни, то беда.

    По этому нужно нормальное встроенное решение от BAS.

    Вы всегда можете просто скопировать папку "Local Storage" из одного профиля в другой



  • @Fox said in [Сделано] Сохранение Local Storage:

    Вы всегда можете просто скопировать папку "Local Storage" из одного профиля в другой

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

    К тому же такой способ не удобен для хранения в базе например.

    По поводу кода выше - там каждая строка закомментирована - школьник разберется.

    Критикуешь - предлагай - напиши изящнее :)



  • Вообщем если возможно реализуйте/верните этот функционал, многим он будет полезен.
    И если возможно то и ответ, будет делаться или забраковано на всегда идея.



  • @Fox said in [Сделано] Сохранение Local Storage:

    Это же обычный объект, сохраните его любым удобным способом в переменную, а затем загрузите

    Ну да так проще:

    Сохранить

    [[LOCALSTORAGE]]=JSON.stringify(localStorage);
    

    Загрузить:

    localStorage.clear();
    var data = JSON.parse([[LOCALSTORAGE]]);
    Object.keys(data).forEach(function (k) {
      localStorage.setItem(k, JSON.stringify(data[k]));
    });
    

    Но только для одного сайта, и только с блокировкой сначала этого сайта, как справедливо заметил @biohacker01



  • @biohacker01 хотя Фокс прав проще папку сохранять и на нее ссылку делать
    Default\Local Storage\leveldb

    Посмотрел данные в открытом виде лежат в файле с расширением log


Log in to reply