JS Подмена информации о состоянии батареи
Я использую puppeteer-extra-plugin-stealth для подмены отпечатков браузера. В данный момент меня волнует подмена состояния батареи navigator.getBattery. Пробую сделать это таким образом (чтобы зафиксировать изменения было невозможно):
utils.replaceWithProxy(Object.getPrototypeOf(navigator), 'getBattery', {
apply: (target, ctx, args) => {
var promise = utils.cache.Reflect.apply(...arguments);
/*
const batteryMgr = await promise;
utils.replaceProperty(batteryMgr, 'charging', { get: () => true });
utils.replaceProperty(batteryMgr, 'chargingTime', { get: () => 0 });
utils.replaceProperty(batteryMgr, 'dischargingTime', { get: () => Infinity });
utils.replaceProperty(batteryMgr, 'level', { get: () => 1 });
*/
return promise; //Promise.resolve(batteryMgr);
}
});
Однако реализованный метод replaceWithProxy не принимает асинхронные обработчики. Как сделать правильную подмену чтобы метод остался асинхронным? Допускается изменять replaceWithProxy.
Ответы (1 шт):
Автор решения: rock8
→ Ссылка
utils.replaceWithProxy(Object.getPrototypeOf(navigator), 'getBattery', {
apply: async (target, ctx, args) => {
var batteryMgr = await utils.cache.Reflect.apply(target, ctx, args);
utils.replaceGetterWithProxy(Object.getPrototypeOf(batteryMgr), 'charging', utils.makeHandler().getterValue(true));
utils.replaceGetterWithProxy(Object.getPrototypeOf(batteryMgr), 'chargingTime', utils.makeHandler().getterValue(0));
utils.replaceGetterWithProxy(Object.getPrototypeOf(batteryMgr), 'dischargingTime', utils.makeHandler().getterValue(Infinity));
utils.replaceGetterWithProxy(Object.getPrototypeOf(batteryMgr), 'level', utils.makeHandler().getterValue(1));
return Promise.resolve(batteryMgr);
}
});