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

GraaFf

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

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
думаю, по политике содержимого можно заблокировать урл или часть урла
 
  • Спасибо
Реакции: GraaFf

GraaFf

Client
Регистрация
21.05.2016
Сообщения
126
Благодарностей
54
Баллы
28
думаю, по политике содержимого можно заблокировать урл или часть урла
ок, допустим, но как можно заблокировать скрипт, прописанный на странице? + хотелось бы про подмену узнать :-)
 

GraaFf

Client
Регистрация
21.05.2016
Сообщения
126
Благодарностей
54
Баллы
28
Задавали аналогичные вопросы еще 2-3 года назад, но ответа на них не было :(
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 438
Благодарностей
9 135
Баллы
113
  • Спасибо
Реакции: samsonnn и GraaFf

GraaFf

Client
Регистрация
21.05.2016
Сообщения
126
Благодарностей
54
Баллы
28

Troll_UA

Client
Регистрация
11.04.2016
Сообщения
121
Благодарностей
38
Баллы
28
Что конкретно делает скрипт на странице?
 

GraaFf

Client
Регистрация
21.05.2016
Сообщения
126
Благодарностей
54
Баллы
28
Что конкретно делает скрипт на странице?
Это не один скрипт, их большое количество. В основном те, которые нагружают интернет, браузер, скрипты всячески контролирующие меня. Подключают отдельным файлом, либо прописывают на страницах. Да, я бы мог отключить полностью JS, но есть и полезные, без которых сайты нормально не функционирует. Так же бывают случаи когда меня не совсем устраивает ответ браузеру от скрипта, в этом случае хотелось бы сделать подмену на свой скрипт, отрабатывающий так, как нужно мне.
 
Последнее редактирование:

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 820
Баллы
113
Если блокировка через политику содержимого не подходит, есть метод 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 - только в след. запросе.

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

Ставим данный экшен перед переходом на нужную страницу и подменяем данные.
 

someone

Client
Регистрация
27.12.2020
Сообщения
25
Благодарностей
23
Баллы
3
Приветы, форумчане.
Решил применить предложенный метод 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

Или я в чем-то ошибся?
 

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 820
Баллы
113
Или я в чем-то ошибся?
Адрес, который используется для поиска содержит /en/index , а при переходе по адресу lessons.zennolab.com попадаем на страницу /ru/index. Поэтому и не работает.
 
  • Спасибо
Реакции: someone

p-sergei

Client
Регистрация
20.12.2016
Сообщения
543
Благодарностей
263
Баллы
63
@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

И как была там "Погода" так "Погода " и осталась после выполнения кубика! Что не так?
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
@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

p-sergei

Client
Регистрация
20.12.2016
Сообщения
543
Благодарностей
263
Баллы
63
я в принципе и хотел что-то подобное сделать, думал этот метод уже на сформированной странице проведет замену если URL совпали, хотя название метода нам как-бы намекает что замена идет в содержимом запроса :D.
 

p-sergei

Client
Регистрация
20.12.2016
Сообщения
543
Благодарностей
263
Баллы
63
@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
 
Последнее редактирование:

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 438
Благодарностей
9 135
Баллы
113
Раздери меня гром, как должна работать эта штука?
В 1-ой строке вашего кода подставьте полный адрес вместо домена:
https://lessons.zennolab.com/en/index
Или хотя бы прописать его с субдоменом и протоколом.

85594
 
Последнее редактирование:

p-sergei

Client
Регистрация
20.12.2016
Сообщения
543
Благодарностей
263
Баллы
63
В 1-ой строке вашего кода подставьте полный адрес вместо домена:
мой код тоже оказался рабочим, надо просто true добавить 3-им параметром, чтобы он всегда срабатывал, а то я же получается на сгенерированном профиле заходил на zennolab потом пробовал протестить метод, а с параметром false там же только первая попытка срабатывает и похоже моя проблема в этом была.
 
  • Спасибо
Реакции: Sergodjan

andrey-ka

Client
Регистрация
03.06.2018
Сообщения
853
Благодарностей
246
Баллы
43
А более сложная логика возможна? У меня с клиента отправляется запрос в base64, мне нужно его словить, распаковать, подменить некоторые значения, упаковать обратно и отправить новый запрос
 

andrey-ka

Client
Регистрация
03.06.2018
Сообщения
853
Благодарностей
246
Баллы
43
А более сложная логика возможна? У меня с клиента отправляется запрос в base64, мне нужно его словить, распаковать, подменить некоторые значения, упаковать обратно и отправить новый запрос
Сам спросил. Сам ответил.
Устанавливаю политику содержимого, затем снифаю трафф, потом посылаю такой же запрос, но с подмененными данными.

C#:
instance.SetContentPolicy("BlockList", null, new[] { "/api/" });

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

ZennoPoster.HTTP.Request(...)
 

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