@REFGOLD said in Сохранение состояний:
@sergerdn а если делать коммерческий проект, можно при работе с профилями такое организовать?
Можно, но если данные браузера будут храниться где-то в интернетах, а не локально, будут нюансы.
@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
Чегось?
@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
@biohacker01 said in [Сделано] Сохранение Local Storage:
@Fox что бы было сохранить/загрузить Local Storage
или хотя бы как раньше через сохранить куки
Сохранить(частично)/очистить(все) данные можно через CDP, а вот сделать импорт уже сложнее, так как готового API у CDP нет. А браузер из BAS работает, в том числе используя именно CDP.
Так как разработчик BAS использует свой же пропатченный браузер, то, я думаю у него есть техническая возможность сделать свой приватный API для экспорта/импорта любых данных, другое дело - будет ли он это делать. Думаю, что не будет.
Вероятно, самое просто решение делать импорт/экспорт данных на уровне файловой системы из профиля браузера. Для некоторых данных нужно будет, чтобы профиль не был открыт.
Ссылки по теме:
P.S.
Нужен метод Storage.setDataForOrigin, которого у CDP пока нет.