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

    @zkrvndm
    Софт для автоматизации
    Найдите на целевом сайте скрипт, который определяет факт вашего нахождения на вкладке и сломайте его, подмените, ну или тупо перехватввайте ивенты. Если надо, эмулируете ивенты сами. Короче, простого решения там нет, надо ковырять сам целевой сайт и писать решение конкретно с учетом его кода.

    Для запуска своего кода на целевом сайте используйте консоль браузера, либо напишите расширение, которое будет вставлять ваш код на страницы сайта автоматически.

    P. S. Попробуйте открывать сайт не во вкладках, а в отдельных ОКНАХ, эти окна не сворачивайте, пусть просто висят фоном, возможно поможет, но скорее-всего нет.
    Ответ написан
    2 комментария
  • Как в Chrome extension передать значение в chrome.alarms?

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

    Если вам нужно запустить алерт на фоновой странице, то тогда алгоритм немного меняется. Проблема здесь в том, что сообщение в фоновой процесс (background.js) может передать лишь контент-скрипт (scripts.js) поэтому необходимо его использовать как посредника.

    Итак, для начала в файле background.js ставите слушатель сообщений таким вот образом:
    chrome.extension.onMessage.addListener(function(message) {
    	
    	console.log('Из контент-скрипта получено следующее сообщение: ' + message);
    	
    	if (message == 'вызвать алерт') {
    		
    		// Здесь впишите ваш код для вызова алерта
    		
    	}
    	
    });

    Этот слушатель будет ожидать сообщений из контент-скрипта (script.js) и при получении сообщения с текстом "вызвать алерт" он выполнит тот код, который вы пропишите.

    Далее, внутри контент-скрипта тоже нужен свой слушатель:
    window.addEventListener('message', function(event) {
    	
    	// Извлекаем текст сообщения:
    	var dom_message = event.data;
    	
    	console.log('Из DOM получено сообщение: ' + dom_message);
    	
    	// Пересылаем полученное сообщение
    	// в фоновый процесс background.js:
    	
    	chrome.extension.sendMessage(event.data);
    	
    });

    Этот слушатель будет ждать сообщений из DOM и пересылать их в фоновый процесс background.js

    А вот теперь внутри DOM вы можете спокойно вызывать:
    window.postMessage('вызвать алерт', '*');
    Это сообщение сначала попадает в конктент-скрипт, а потом уже вполне себе спокойно уйдет в фоновый процесс, где активирует выполнение того кода, который вам нужно - необязательно алерта, можно что угодно.
    Ответ написан
  • Как синхронизировать нажатие клавиатуры и мышки в нескольких профилях хрома?

    @zkrvndm
    Софт для автоматизации
    Реализовать это можно на JavaScript, но вам обязательно понадобиться бэкэкенд, чтобы организовать общение между профилями. Присмотритесь к технологии WebSocket:
    https://learn.javascript.ru/websockets
    Ответ написан
    Комментировать
  • Можно ли запретить доступ ко вкладке расширений (chrome://extensions/)?

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

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

    @zkrvndm
    Софт для автоматизации
    В фоновом процессе расширения background.js прописываете:
    Развернуть
    // Записываем параметры прокси в глобальную переменную:
    
    window.proxy_auth = {
    	'address': 'Адрес_прокси:Порт_прокси',
    	'proxy_user': 'Логин от прокси',
    	'proxy_password': 'Пароль от прокси'
    };
    
    // Устсновка прокси через назначение PAC-скрипта:
    
    chrome.proxy.settings.set(
    	{
    		value: {
    			mode: 'pac_script',
    			pacScript: {
    				data: 'function FindProxyForURL(url, host) { return "PROXY '+proxy_auth.addres+'"; }'
    			}
    		},
    		scope: 'regular'
    	},
    	function() {
    		console.log('Прокси '+proxy_auth.addres+' установлен');
    	}
    );
    
    // Автоматическая авторизация для установленного прокси:
    
    chrome.webRequest.onAuthRequired.addListener(
    	function(info, callback) {
    		if (info.isProxy && typeof window.proxy_auth !== 'undefined') {
    			callback({
    				authCredentials: {
    					username: window.proxy_auth.proxy_user,
    					password: window.proxy_auth.proxy_password
    				}
    			});
    		}
    		else {
    			callback();
    		}
    	},
    	{ urls: [ '<all_urls>' ] },
    	[ 'asyncBlocking' ]
    );

    В манифесте расширения у вас должны быть прописаны разрешения:
    Развернуть
    {
    	
    	"name" : "Имя расширения",
    	
    	"manifest_version" : 2,
    		
    	"permissions" : [ "proxy", "webRequest", "webRequestBlocking", "<all_urls>" ],
    	
    	"background" : { "persistent": true, "scripts": [ "background.js" ] }
    
    }


    P. S. Сбросить ранее установленный прокси можно установив пустой PAC-скрипт, примерно так:
    Развернуть
    chrome.proxy.settings.set(
    	{
    		value: {
    			mode: 'pac_script',
    			pacScript: {
    				data: 'function FindProxyForURL(url, host) { return "DIRECT"; }'
    			}
    		},
    		scope: 'regular'
    	},
    	function() {
    		console.log('Прокси сброшены');
    	}
    );
    Ответ написан
    2 комментария
  • Как расширения хрома проксируют сайты?

    @zkrvndm
    Софт для автоматизации
    Есть бесплатное расширение AdGuard VPN, там можно настраивать на каких сайтах использовать VPN, а на каких нет.
    Ответ написан
    Комментировать
  • Перестал работать прокси-расширение на Хроме, что делать?

    @zkrvndm
    Софт для автоматизации
    Установите AdGuard VPN:
    https://adguard-vpn.com/ru/welcome.html
    Он бесплатный в пределах 3 Гб в месяц, можно настроить автовключение только на определенных сайтах. Плюс, у них там под капотом используется своя собственная разработка, которая отлично маскирует трафик от всяких блокировщиков.
    Ответ написан
    Комментировать
  • Как изменить заголовок страницы до загрузки DOM (расширение Chrome)?

    @zkrvndm
    Софт для автоматизации
    Это конечно можно сделать, но только через костыль. Укажите в манифесте расширения опцию run_at со значением document_start, чтобы ваш контент-скрипт запускался до готовности документа:
    {
    	
    	"name" : "Имя расширения",
    	
    	"manifest_version" : 2,
    	
    	// ............................
    	
    	"content_scripts" : [
    		
    		{	
    			"matches" : [ "https://*.site.ru/*", ],
    			"run_at": "document_start",
    			"js" : [ "content-script.js" ]
    		}
    		
    	]
    	
    }

    Далее в контент-скрипте вызывайте:
    document.write('');
    document.close();

    Это мгновенно перезапишет содержимое страницы пустотой, а дальше делайте с ней (со страницей), что хотите.

    P. S. Зачем вам это нужно, если не секрет? Может другое решение подскажу.
    Ответ написан
    5 комментариев
  • Как через userscripts запретить внедрение JavaScript от сайта?

    @zkrvndm
    Софт для автоматизации
    Вы можете легко переписать скрипты ВКонтакте на свои через контент-скрипт / UserScript, просто объявляете свою функцию и она тупо заменит функцию от ВКонтакте.

    Пример объявления функции test() через контент-скрипт / UserScript:
    var script = document.createElement('script');
    script.innerHTML = `function test() {
        // Ваш код
    }`;
    document.head.appendChild(script);

    Разумеется объявлять надо уже после прогрузки скриптов от ВКонтакте, для этого используйте событие load.

    P. S. Осталось вам лишь найти функцию от ВКонтакте отвечающую за отправку данных) Для этого исследуйте обработчики, которые на кнопке висят при помощи инспектора хрома.
    Ответ написан
  • Как изменить FormData?

    @zkrvndm
    Софт для автоматизации
    Это делается через контент-скрипт. При помощи контент-скрипт инжектиие на ВК свой код и уже далее через вставленный скрипт перехватываете POST-запросы, если надо - меняете.

    P. S. Просто я не уверен, что chrome.webRequest.onBeforeRequest позволяет редактировать тело запроса, посмотрите документацию - скорее всего не позволяет.
    Ответ написан
  • Почему не срабатывает скрипт моего расширения для браузера на некоторых сайтах?

    @zkrvndm
    Софт для автоматизации
    Скорее всего проблема в том, что на момент запуска кода из content.js кнопка ваша еще отсутсвует на странице.

    Я дам вам функцию кликер с одного из своих расширений, используйте его:
    Асинхронная функция кликер
    function clickElements(selector, regexp, where) {
    	
    	return new Promise(function(returnResult) {
    		
    		var search_result = false;
    		
    		var local_reactive_function = function() {
    			
    			var click_elements = searchElements(selector, regexp, where);
    			
    			if (click_elements.length > 0) {
    				
    				if (search_result === false) {
    					
    					search_result = true;
    					observer.disconnect(); 
    					
    					setTimeout(function() {
    						
    						var click_elements = searchElements(selector, regexp, where);
    						
    						for (var n = 0; n < click_elements.length; n++) {
    							click_elements[n].click();
    						}
    						
    						returnResult(click_elements.length);
    						
    					}, 1000);
    					
    				}
    				
    			}
    			
    		}
    		
    		var observer = new MutationObserver(local_reactive_function);
    		
    		observer.observe(document.body, {
    			characterData: true,
    			attributes: true,
    			childList: true,
    			subtree: true
    		});
    		
    		local_reactive_function();
    		
    	});
    	
    }
    
    function searchElements(selector, regexp, where) {
    
    	var search_elements = [];
    	
    	if (typeof where !== 'undefined') {
    		
    		var all_elements = where.querySelectorAll(selector);
    		
    	}
    	
    	else {
    		
    		var all_elements = document.querySelectorAll(selector);
    		
    	}
    	
    	for (var n = 0; n < all_elements.length; n++) {
    		
    		if (typeof regexp == 'object') {
    			
    			if (typeof regexp.test == 'function') {
    				
    				if (regexp.test(all_elements[n].innerText.trim())) {
    					
    					search_elements.push(all_elements[n]);
    					
    				}
    				
    			}
    			
    			
    		}
    		
    		else {
    			
    			search_elements.push(all_elements[n]);
    			
    		}
    	}
    	
    	return search_elements;
    
    }

    Чтобы кликнуть последовательно (один за другим) несколько элементов вызывайте функцию clickElements:
    (async function() {
        await clickElements('CSS-селектор 1');
        await clickElements('CSS-селектор 2');
        await clickElements('CSS-селектор 3');
    })();

    Функция clickElements обязательно дождется появления кнопок соотвествующих указанным CSS-селекторам и только тогда их нажмёт, последовательно сверху вниз. При этом в эту функцию вторым параметром можно передать регулярное выражение, чтобы найти кнопку по его тексту.
    Ответ написан
    Комментировать
  • Можно ли сделать безлимит на ютюб на ноутбуке, если тариф включает безлимитный ютюб?

    @zkrvndm
    Софт для автоматизации
    Я тебе даже больше скажу, если есть желание и много терпения, можно и вовсе организовать себе полностью бесплатный интернет и не платить за него ни копейки:
    https://yandex.ru/search/?text=интернет%20при%20от...
    Однако, должен предупредить, что так поступать плохо, но если очень хочется, то множество гайдов в твоем распоряжении.
    Ответ написан
  • Как предотвратить переадресацию youtube?

    @zkrvndm
    Софт для автоматизации
    Используйте правильную ссылку:
    https://m.youtube.com/?persist_app=1&app=m
    Ответ написан
    4 комментария
  • Как сделать скрин в расширении chrome?

    @zkrvndm
    Софт для автоматизации
    Ну видно же, что вам надо imgSrc брать из response!

    Делайте так:
    console.log(response.imgSrc);
    var link = document.createElement('a');
    link.href = response.imgSrc;
    link.download = 'Scrin.jpg';
    link.click();
    Ответ написан
    Комментировать
  • Как передавать сообщения из popup.js в content.js?

    @zkrvndm
    Софт для автоматизации
    Для отправки сообщения из popup-окна в content-скрипт нужно выполнить в popup-окне:
    chrome.tabs.query({}, function(tabs) {
    	for (i = 0; i < tabs.length; i++) {
    		chrome.tabs.sendMessage(tabs[i].id, 'Сообщение, которое нужно передать');
    	}
    });

    Код выше перебирает все вкладки и отправляет во все существующие вкладки указанное сообщение.

    На стороне content-скрипта для приема сообщения должен стоять обработчик:
    chrome.extension.onMessage.addListener(function(msg) {
    	console.log('Принято сообщение: ' + msg);
    });
    Ответ написан
    5 комментариев
  • Как удалить js-скрипт с html-страницы в Сhrome до его выполнения?

    @zkrvndm
    Софт для автоматизации
    Потому что Google Chrome начиная с этого года потихоньку перекрывает возможность редактирования запросов, типа это небезопасно, как результат - функционал у блокировщиков реклам потихоньку отваливается. Радует что хоть Firefox не стал идти на поводу у Google в этом плане. Конкретно вам же рекомендую использовать системный блокировщик AdGuard для Windows, там можно прописать любые правила наплевав на мнение браузера.
    Ответ написан
  • Как сохранять и считывать настройки расширения для браузера на JS?

    @zkrvndm
    Софт для автоматизации
    Нужно хранить данные в базе данных и не просто базе данных, а желательно в базе данных фонового процесса. Например, я сам всегда использую IndexedDB, он удобен тем, что там можно хранить что угодно - любой тип данных.

    P. S. Есть риск потерять данные, если юзер очистит полностью историю и кеш или переустановит расширение. Если нужна высокая надежность, можно данные и вовсе хранить у себя на сервере, либо предлагать функцию экспорта и импорта данных специальным файлом настроек. Насчет chrome.storage ничего не могу сказать, никогда не пользовался им.
    Ответ написан
    Комментировать
  • Как защитить страницу от случайного закрытия в Google Chrome?

    @zkrvndm Автор вопроса
    Софт для автоматизации
    Всем спасибо, разобрался. Надо оказывается вот так:
    window.onbeforeunload = function() {
      return false;
    };
    Ответ написан
    Комментировать
  • Как удалить абсолютно все Cookie в браузере используя Chrome API?

    @zkrvndm Автор вопроса
    Софт для автоматизации
    Пример кода для background.js вашего расширения:
    chrome.cookies.getAll({}, function(cookies) {
    	
    	var count = cookies.length;
    	
    	console.log('Найдено Cookie '+count+' шт.');
    	console.dir(cookies);
    
    	for (var n = 0; n < cookies.length; n++) {
    		
    		var details = {
    			'name': cookies[n]['name'],
    			'storeId': cookies[n]['storeId'],
    			'url': 'https://' + cookies[n]['domain'] + cookies[n]['path']
    		};
    		
    		chrome.cookies.remove(details, function(result) {
    			count--;
    			if (count === 0) {
    				console.log('Cookie успешно очищены:');
    				chrome.cookies.getAll({}, function(cookies) { console.dir(cookies); });
    			}
    		});
    		
    	}
    
    });
    Ответ написан
    Комментировать