Ответы пользователя по тегу Google Chrome
  • Расширение для Chrome, с помощью которого можно пометить элементы чужой веб страницы (в браузере), например зачеркнуть текст или поменять цвет блока?

    @zkrvndm
    Софт для автоматизации
    Это называется заметки, браузер Vivaldi из под коробки умеет в заметки, а на остальные браузеры вполне можно установить специальные расширения.
    Ответ написан
  • Как получить стили из кэша Chrome Android?

    @zkrvndm
    Софт для автоматизации
    Посмотрите нет ли снимка сайта на:
    https://archive.org/web
    И берите стили оттуда.
    Ответ написан
  • Пишу chrome расширение. При нажатии на кнопку нужно выполнять JS функцию. Как это реализовать?

    @zkrvndm
    Софт для автоматизации
    Стоит учитывать, что тег script в html файле запрещён

    Он не запрещен, просто в файлах расширения скрипты надо цеплять в виде ссылки, а не вставлять инлайново.
    Ответ написан
    Комментировать
  • Как отключить картинку на заднем фоне сайта в браузере google chrome?

    @zkrvndm
    Софт для автоматизации
    Можно конечно, используйте UserScrit для блокировки изображения.
    Ответ написан
    Комментировать
  • Как программно загрузить файл в поле?

    @zkrvndm
    Софт для автоматизации
    Комментировать
  • Как передать данные в свое Google Chrome расширение с локального вебсервера?

    @zkrvndm
    Софт для автоматизации
    Используйте WebSocket, чтобы постоянно держать связь с вашим сервером и фоновым процессом в расширении.

    https://learn.javascript.ru/websocket
    https://yandex.ru/turbo/nuancesprog.ru/s/p/6466/
    Ответ написан
    Комментировать
  • Как разблокировать FileList на запись?

    @zkrvndm Автор вопроса
    Софт для автоматизации
    Лайфхак для создания коллекции файлов FileList:
    var info = 'Какой-нибудь текст';
    
    var dt  = new DataTransfer();
    dt.items.add(new File([info], 'primer.txt', {type: 'text/plain'}));
    var file_list = dt.files;
    
    console.log('Коллекция файлов создана:');
    console.dir(file_list);
    
    // Вставим созданную коллекцию в реальное поле:
    document.querySelector('input[type="file"]').files = file_list;

    В переменную info вместо текста, можно положить в том числе и Blob - это особенность функции new File() которая первым параметром может принять как массив из текстов, так и массив из Blob.

    Фактически лайфхак выше позволяет нам JavaScript-ом скачать любой какой угодно файл со своего сайта и вставить его абсолютно в любое поле <input type="file"> - что просто архиполезно для браузерных ботов.

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

    Огромное спасибо пользователю Mmx Symfony, который нарыл это решение где-то в недрах иностранных сайтов. Сам я, в свое время сколько не искал, везде был ответ, что это невозможно, а оказалось, что нихрена подобного =)
    Ответ написан
    Комментировать
  • Можно ли предотвратить засыпание свернутой вкладки, или закрытого браузера Google Chrome?

    @zkrvndm
    Софт для автоматизации
    Да, по идее можно запретить выгрузку вкладок применив 2 приема.

    Добавьте в background.js:
    chrome.tabs.onCreated.addListener(function(tab) {
        chrome.tabs.update(tab.id, {
            autoDiscardable: false
        });
    });
    
    chrome.tabs.onReplaced.addListener(function(tabId) {
        chrome.tabs.update(tabId, {
            autoDiscardable: false
        });
    });
    
    chrome.runtime.onInstalled.addListener(function(details) {
        chrome.tabs.query({}, function(tabs) {
            tabs.forEach(function(tab) {
                chrome.tabs.update(tab.id, {
                    autoDiscardable: false
                });
            });
        });
    });

    В манифесте расширения у вас должны быть соответствующие разрешения:
    ...
    "permissions" : [ "tabs" ],
    "background" : { "persistent": true, "scripts": [ "background.js" ] },
    ...

    Кроме того, на активной вкладке необходимо разместить mp3-трек и запустить его в бесконечном цикле:
    <video id="antifreeze" style="position: fixed; right: 30px; bottom: 30px; z-index: 99999; height: 55px; width: 300px;" controls loop name="media">
        <source src="https://qna.habr.com/silence.mp3" type="audio/mpeg">
    </video>

    Начиная с 81 версии хрома, вкладки замораживаются через 5 минут, после сворачивания. Исключением являются вкладки в которых воспроизводится какой-нибудь медиконтент (видео там или музыка).
    Ответ написан
    7 комментариев
  • Можно ли использовать расширения Chrome для написания бота для сайта? Или можно использовать консоль?

    @zkrvndm
    Софт для автоматизации
    Да, возможно. Расширения для хром позволяют запускать произвольный JavaScript-код на сайтах, нужная вам опция называется контент-скриптами:
    chrome-ext.blogspot.com/2014/02/content-scripts.html
    Ответ написан
    Комментировать
  • Как быстро переключать proxy?

    @zkrvndm
    Софт для автоматизации
    Создайте папку с именем Proxy, в нём создайте 2 файла.

    Содержимое файла manifest.json должно быть таким:
    {
    	
    	"name" : "Proxy",
    
    	"manifest_version" : 2,
    	 
    	"version" : "1.0",
    		
    	"description" : "Болванка для создания расширения для смены прокси на лету",
    		
    	"permissions" : [ "proxy", "webRequest", "webRequestBlocking", "<all_urls>" ],
    	
    	"background" : { "persistent": true, "scripts": [ "background.js" ] }
    
    }

    Содержимое файла background.js должно быть таким:
    // Функция для установки произвольного http-прокси:
    
    function setProxy(address, port, login, password) {
    	
    	if (typeof address == 'undefined' && typeof port == 'undefined') {
    		
    		chrome.proxy.settings.clear(
    			{},
    			function() {
    				console.log('Настройки прокси успешно удалены');
    			}
    		);
    		
    	}
    	
    	else {
    		
    		if (typeof login == 'undefined' && typeof password == 'undefined') {
    			
    			window.auth = undefined;
    			
    		}
    		
    		else {
    			
    			window.auth = Object.create(null);
    			window.auth['login'] = login;
    			window.auth['password'] = password;
    			
    		}
    		
    		chrome.proxy.settings.set(
    			{
    				value: {
    					mode: 'pac_script',
    					pacScript: {
    						data: 'function FindProxyForURL(url, host) { return "PROXY '+address+':'+port+'";  }'
    					}
    				},
    				scope: 'regular'
    			},
    			function() {
    				console.log('Прокси http://'+address+':'+port+' успешно установлен');
    			}
    		);
    		
    	}
    	
    }
    
    // Автоматиечский ввод логина и пароля, если прокси требует авторизации:
    
    chrome.webRequest.onAuthRequired.addListener(
        function(info, callback) {
            if (info.isProxy && typeof window.auth !== 'undefined') {
    			callback({
    				authCredentials: {
    					username: window.auth['login'],
    					password: window.auth['password']
    				}
    			});
    		}
    		else {
    			callback();
    		}
        },
        { urls: [ '<all_urls>' ] },
        [ 'asyncBlocking' ]
    );
    
    // Обнуление настроек прокси сразу после установки расширения:
    
    chrome.proxy.settings.clear({}, function() {});

    Далее папку Proxy установите в качестве расширения в свой браузер:
    Меню -> Дополнительный инструменты -> Расширения ->
    Режим разработчика -> Загрузить распакованное расширение


    Чтобы поменять прокси в браузере, в консоли фоновой страницы расширения достаточно вызывать функцию setProxy() передав первым параметром адрес прокси, вторым порт, третьим логин, а четвертым пароль. Пример:
    setProxy('185.202.3.118', '65233', 'idle', 'dfgfgfgfdd');

    Чтобы удалить ранее установленный прокси, достаточно вызывать эту же функцию без параметров. И да, работает только с http-прокси, поддержку socks-прокси я не делал, так как в моем проекте это не было нужно.

    Надеюсь вы осознаете, что это просто пример кода для смены прокси в браузере. Разумеется болванку надо переделывать под себя, сделав ему интерфейс, но это уже ваши заботы, бесплатно я это точно не буду делать.
    Ответ написан
    Комментировать
  • Возможно ли закешировать около 1 гб в браузере?

    @zkrvndm
    Софт для автоматизации
    Возможно конечно. Для хранения больших объемов данных в браузерах существует встроенная БД IndexedDB.

    Для работы с ней сначала подключаем специальную библиотеку, которая упрощает ввод и вывод:
    <script src="https://cdnjs.cloudflare.com/ajax/libs/localforage/1.9.0/localforage.js"></script>

    Далее, чтобы сохранить какие-то данные выполняем в консоли браузера:
    result = await localforage.setItem('key', save_data);
    console.log('Данные успешно сохранены:');
    console.dir(result);

    Где в save_data лежат сохраняемые данные, а key это ключ по которому можно было бы получить к ним доступ.

    Из особенностей, в save_data мы можем положить любой тип данных - хоть строку, хоть массив, хоть объект. Да даже файл при желании можно сохранить! При этом нет ограничений по объему хранимых данных, можете хоть сто мегабайт, хоть триста запихнуть - встроенное хранилище все сожрет.

    Чтобы потом извлечь сохраненные данные достаточно выполнить:
    result = await localforage.getItem('key');
    console.log('Данные успешно извлечены:');
    console.dir(result);

    Срок хранения данных - неограниченно. Или пока пользователь вручную не обнулит кеш браузера.

    P. S. Обратите внимание, что если вы где-то в своем коде внутри функции используете слово await, то такая функция обязательно должна иметь приставку async! Иначе получите ошибку. В консоли можно использовать await в лоб, но для использования await в коде нужно, чтобы функция внутри которой она вызывается была асинхронной!!!
    Ответ написан
    4 комментария
  • Как пользоваться хромом вне активного окна?

    @zkrvndm
    Софт для автоматизации
    Я тоже столкнулся недавно с такой проблемой.

    Решил проблему при помощи воспроизведения mp3-файла с тишиной в бесконечном цикле:
    <video style="position: fixed; left: 30px; bottom: 30px; z-index: 99999;" autoplay controls loop name="media">
    	<source src="https://ссылка_на_музыку/file.mp3" type="audio/mpeg">
    </video>

    https://www.opennet.ru/opennews/art.shtml?num=53846
    Усилено урезание ресурсов для фоновых вкладок. Подобные вкладки теперь не могут потреблять больше 1% ресурсов CPU и могут активироваться не чаще одного раза в минуту. После пяти минут нахождения в фоне вкладки замораживаются, за исключением вкладок в которых воспроизводится мультимедийное содержимое или ведётся запись.
    Ответ написан
    Комментировать
  • Как при скачивании файлов убрать "Невозможно безопасно скачать этот файл."?

    @zkrvndm
    Софт для автоматизации
    Хром в последние годы на себя слишком много берет, того и гляди превратится в Яндекс.Браузер, который и вовсе все решает за тебя. Собственно, порекомендовал бы все же применять менеджеры загрузок в связке с расширением, т. е. жмешь что-то скачать в хроме и загрузка автоматически уходит в менеджер.
    Ответ написан
    Комментировать
  • Как можно оптимизировать нагрузку на компьютер?

    @zkrvndm
    Софт для автоматизации
    Описанную вами задачу можно потенциально можно через 1 браузер решить. Создаете специальное расширение, которое авторизуется на целевом сайте и запоминает куки куда-нибудь в базу данных, затем расширение очищает куки и повторяет процесс авторизации заново. И так 30 раз, пока вы не скопите 30 кук от всех ваших 30 учеток.

    Дальше же прожимать кнопки дело техники, смотрите какие-запросы отправляются при нажатии кнопки и симулируйте POST-запросы из фонового процесса расширения с передачей нужных кук в заголовках.

    Честно сказать, здесь даже браузер не нужен, если при авторизации не используется никаких хитрых капч, проблему и вовсе можно было бы решить одним php скриптом.
    Ответ написан
    Комментировать
  • Как отменить заморозку фоновых вкладок Google Chrome?

    @zkrvndm
    Софт для автоматизации
    Запретить заморозку вкладок можно при помощи Chrome API.

    Создайте пустое расширение и в background.js разместите следующие обработчики:
    chrome.tabs.onCreated.addListener(function(tab) {
        chrome.tabs.update(tab.id, {
            autoDiscardable: false
        });
    });
    
    chrome.tabs.onReplaced.addListener(function(tabId) {
        chrome.tabs.update(tabId, {
            autoDiscardable: false
        });
    });
    
    chrome.runtime.onInstalled.addListener(function(details) {
        chrome.tabs.query({}, function(tabs) {
            tabs.forEach(function(tab) {
                chrome.tabs.update(tab.id, {
                    autoDiscardable: false
                });
            });
        });
    });


    Также имеет смысл отключить опцию:
    chrome://flags/#enable-heavy-ad-intervention
    Она отвечает за блокировку фреймов создающих слишком большую нагрузку по мнению Google и похрен, что бывают в природе сайты, в которых весь основной функционал предоставлен через фреймы.
    Ответ написан
  • В Chrome исчезло автозаполнение полей ввода — как восстановить?

    @zkrvndm
    Софт для автоматизации
    Читайте новости, с недавнего времени изменились правила работы авто заполнения полей форм:
    https://www.opennet.ru/opennews/art.shtml?num=53396
    Попробуйте поэкспериментировать с настройкой chrome://flags#mixed-forms-disable-autofill
    Ответ написан
  • Как запретить meta-редирект?

    @zkrvndm
    Софт для автоматизации
    Я не уверен, но попробуйте выполнить window.stop() сразу после готовности страницы.

    Еще можно попробовать предопределить window.onbeforeunload прервав действие по умолчанию.

    Но самый простой способ это использовать Firefox, там данный метатег можно отключить в настройках.
    Ответ написан
    Комментировать
  • Не приходят push-уведомления на старых версиях хром (49), как исправить?

    @zkrvndm
    Софт для автоматизации
    Сделать поддержку старых версий Google Chrome очень просто. Смотрим User Agent и если видим старую версию Chrome, то выводим соответствующую заглушку о том, что для просмотра сайта надо обновить браузер. Для удобства можете даже сделать большую красную кнопку ОБНОВИТЬ со ссылкой на встроенный авто обновлятор:
    chrome://settings/help

    На всякий случай, под кнопкой написать:
    Что делать, если браузер не хочет или не может обновится?

    Написать там небольшой FAQ о том, как принудительно обновить браузер без потери данных.
    Ответ написан
    Комментировать
  • Есть ли обход для тега audio в html для google chrome?

    @zkrvndm
    Софт для автоматизации
    Залейте свою музыку на Ютуб и встройте видос на сайт со включенным автовоспроизведением.
    Ответ написан