Заблокировать или подменить js

  • Автор темы Автор темы GraaFf
  • Дата начала Дата начала

GraaFf

Client
Регистрация
21.05.2016
Сообщения
126
Реакции
54
Баллы
28
Добрый день ув. форумчане. Столкнулся с необходимостью подменить загрузку .js, как это можно реализовать? Смотрел в кубиках, ничего не нашел, может быть плохо искал. + Было бы не плохо, если б еще поделились информацией как можно заблокировать загрузку определенного скрипта на странице (не все скрипты). Надеюсь на вашу помощь. Спасибо.
 
думаю, по политике содержимого можно заблокировать урл или часть урла
ок, допустим, но как можно заблокировать скрипт, прописанный на странице? + хотелось бы про подмену узнать :)
 
Задавали аналогичные вопросы еще 2-3 года назад, но ответа на них не было :(
 
Задавали аналогичные вопросы еще 2-3 года назад, но ответа на них не было :(
этот инструмент пробовали?

upload_2018-2-6_16-10-55.png
 
  • Спасибо
Реакции: samsonnn и GraaFf
Что конкретно делает скрипт на странице?
 
Что конкретно делает скрипт на странице?
Это не один скрипт, их большое количество. В основном те, которые нагружают интернет, браузер, скрипты всячески контролирующие меня. Подключают отдельным файлом, либо прописывают на страницах. Да, я бы мог отключить полностью JS, но есть и полезные, без которых сайты нормально не функционирует. Так же бывают случаи когда меня не совсем устраивает ответ браузеру от скрипта, в этом случае хотелось бы сделать подмену на свой скрипт, отрабатывающий так, как нужно мне.
 
Последнее редактирование:
Если блокировка через политику содержимого не подходит, есть метод ChangeResponse.
Вот пример из документации:

C#:
Развернуть Свернуть Копировать
instance.ChangeResponse("http://lessons.zennolab.com/en/index",
    new List<string>
    {
        "(?<=<input type=\"checkbox\" class=\"inputs\"><h2>&ensp;).*(?=</h2>)",
        "(?<=<textarea rows=\"5\" cols=\"45\" name=\"text\">).*(?=</textarea>)",
        "<h2>Any text:</h2>"
    },
    new List<string>
    {
        "no OS",
        "NEW TEXT TO TEXTAREA",
        "<h2>NEW HEADER TO TEXTAREA:</h2>"
    });

Первый аргумент (в коде выше - "http://lessons.zennolab.com/en/index") - это урл, на котором надо произвести замену содержимого. Тут можно использовать регулярку.

Второй аргумент - список регулярок
В коде выше это:
C#:
Развернуть Свернуть Копировать
    new List<string>
    {
        "(?<=<input type=\"checkbox\" class=\"inputs\"><h2>&ensp;).*(?=</h2>)",
        "(?<=<textarea rows=\"5\" cols=\"45\" name=\"text\">).*(?=</textarea>)",
        "<h2>Any text:</h2>"
    }
По данным регуляркам будет производится поиск данных, которые подлежат замене.

Третий аргумент - данные, которыми будут заменены исходные значения.
В коде выше это:
C#:
Развернуть Свернуть Копировать
    new List<string>
    {
        "no OS",
        "NEW TEXT TO TEXTAREA",
        "<h2>NEW HEADER TO TEXTAREA:</h2>"
    }

Есть ещё четвёртый (bool - true, false), необязательный, аргумент - насколько я понял с его помощью можно указать заменять ли данные только в следующем запросе или постоянно. По умолчанию стоит false - только в след. запросе.

Кол-во элементов в списках, во втором и третьем аргументах, должно совпадать.

Ставим данный экшен перед переходом на нужную страницу и подменяем данные.
 
Приветы, форумчане.
Решил применить предложенный метод ChangeResponse , но результат отрицательный. Кто-нибудь на практике его тестировал? Он вообще работает?
Вот мой код (на основе того, что в документации).
Пытаюсь заменить содержимое заголовков h1 и h2.

C#:
Развернуть Свернуть Копировать
instance.ChangeResponse("http://lessons.zennolab.com/en/index",
    new List<string>
    {
        "(?<=<h1>).*(?=</h1>\t)",
        "(?<=<h2>).*(?=</h2>\t)"

    },
    new List<string>
    {
        "MY HEADER H1",
        "MY CUSTOM HEADER H2"

    }, true);
            
Tab tab = instance.ActiveTab;
if ((tab.IsVoid) || (tab.IsNull)) return -1;
if (tab.IsBusy) tab.WaitDownloading();
tab.Navigate("lessons.zennolab.com", "");
if (tab.IsBusy) tab.WaitDownloading();

Версия зенки 7.3.1.1

Или я в чем-то ошибся?
 
Или я в чем-то ошибся?
Адрес, который используется для поиска содержит /en/index , а при переходе по адресу lessons.zennolab.com попадаем на страницу /ru/index. Поэтому и не работает.
 
  • Спасибо
Реакции: someone
@nicanil подскажи пожалуйста почему эта штука не работает?
Решил потыркаться и попробовать, что это такое, тупо решил заменить на странице Яндекса слово "Погода" на "Пагода"

C#:
Развернуть Свернуть Копировать
instance.ChangeResponse("https://yandex.ru",
    new List<string>
    {
        "Погода"
    },
    new List<string>
    {
        "Пaгода"
    });


Tab tab = instance.ActiveTab;
if ((tab.IsVoid) || (tab.IsNull)) return -1;
if (tab.IsBusy) tab.WaitDownloading();
tab.Navigate("https://yandex.ru", "");
if (tab.IsBusy) tab.WaitDownloading();

1636998278428.png

И как была там "Погода" так "Погода " и осталась после выполнения кубика! Что не так?
 
@nicanil подскажи пожалуйста почему эта штука не работает?
Решил потыркаться и попробовать, что это такое, тупо решил заменить на странице Яндекса слово "Погода" на "Пагода"

C#:
Развернуть Свернуть Копировать
instance.ChangeResponse("https://yandex.ru",
    new List<string>
    {
        "Погода"
    },
    new List<string>
    {
        "Пaгода"
    });


Tab tab = instance.ActiveTab;
if ((tab.IsVoid) || (tab.IsNull)) return -1;
if (tab.IsBusy) tab.WaitDownloading();
tab.Navigate("https://yandex.ru", "");
if (tab.IsBusy) tab.WaitDownloading();

Посмотреть вложение 85513

И как была там "Погода" так "Погода " и осталась после выполнения кубика! Что не так?
это меняет данные в запросах. если не поменял значит эти данные пришли не через запросы с этой регуляркой. а может даже и вообще не через запросы, так как в мониторе есть сокеты.
в общем надо ловить конкретный запрос и глазами там видеть те данные которые надо поменять.
 
  • Спасибо
Реакции: nicanil и p-sergei
я в принципе и хотел что-то подобное сделать, думал этот метод уже на сформированной странице проведет замену если URL совпали, хотя название метода нам как-бы намекает что замена идет в содержимом запроса :D.
 
@nicanil у меня дикое желание разобраться с этим методом, даже в поддержку писал, а она что-то молчит :bw:.
Пробую пример попроще разобрать на примере сайта зеннолаба
C#:
Развернуть Свернуть Копировать
instance.ChangeResponse("zennolab.com",
    new List<string>
    {
        "index"
       
    },
    new List<string>
    {
        "index1"
    });


Tab tab = instance.ActiveTab;
if ((tab.IsVoid) || (tab.IsNull)) return -1;
if (tab.IsBusy) tab.WaitDownloading();
tab.Navigate("https://lessons.zennolab.com/en/index", "");
if (tab.IsBusy) tab.WaitDownloading();

Подумал типо может только какое-то первое совпадение меняет, а потом уже нет. Смотрю итоговый код страницы, там 3 совпадения нигде замены нет! Раздери меня гром, как должна работать эта штука?

2021-11-17_20-01-01.jpg

P.S хм, блин ну почему так, решил настройки браузера поменять, что-то перегенерировал и сработало o_O
 
Последнее редактирование:
Раздери меня гром, как должна работать эта штука?
В 1-ой строке вашего кода подставьте полный адрес вместо домена:
https://lessons.zennolab.com/en/index
Или хотя бы прописать его с субдоменом и протоколом.

85594
 
Последнее редактирование:
В 1-ой строке вашего кода подставьте полный адрес вместо домена:
мой код тоже оказался рабочим, надо просто true добавить 3-им параметром, чтобы он всегда срабатывал, а то я же получается на сгенерированном профиле заходил на zennolab потом пробовал протестить метод, а с параметром false там же только первая попытка срабатывает и похоже моя проблема в этом была.
 
  • Спасибо
Реакции: Sergodjan
А более сложная логика возможна? У меня с клиента отправляется запрос в base64, мне нужно его словить, распаковать, подменить некоторые значения, упаковать обратно и отправить новый запрос
 
А более сложная логика возможна? У меня с клиента отправляется запрос в base64, мне нужно его словить, распаковать, подменить некоторые значения, упаковать обратно и отправить новый запрос

Сам спросил. Сам ответил.
Устанавливаю политику содержимого, затем снифаю трафф, потом посылаю такой же запрос, но с подмененными данными.

C#:
Развернуть Свернуть Копировать
instance.SetContentPolicy("BlockList", null, new[] { "/api/" });

IEnumerable<TrafficItem> traffic = instance.ActiveTab.GetTraffic(new[] { "/api/" }, null);

ZennoPoster.HTTP.Request(...)
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)