расширение Chrome включеноОбновлено слишком поздно - PullRequest
0 голосов
/ 05 мая 2018

Доброе утро Я пытаюсь с расширением chrome или usercript удалить скрипт перед его выполнением. Я пытался

chrome.tabs.onUpdated.addListener(function(tabid, info, tab) {
    chrome.tabs.executeScript(tabid, {file:"test.js"});
    //if (info.status == "complete") {
      //
   // }
});

А в test.js я удаляю элемент script, который первый (только для примера)

document.body.querySelectorAll('*')[0].remove()

Даже первый вызов test.js слишком поздний, скрипт внутри страницы уже выполнен. Есть ли способ заменить HTML перед интерпретацией или удалить скрипт перед выполнением?

Я также пытался "run_at": "document_start" для usercript, но скрипт запускается до того, как скрипт, который я хочу удалить, загружается в dom, поэтому я не могу его удалить. В прошлом это было возможно с событием beforeload, но оно было удалено из Chrome. Я также пробовал chrome.runtime.onMessage.addListener и chrome.webRequest.onBeforeRequest.addListener, но они не запускаются, когда я перезагружаю страницу. Спасибо

1 Ответ

0 голосов
/ 06 мая 2018

Наконец, вместо расширения я использую mitmproxy, который является прокси, который позволяет изменять содержимое.

Установка митпрокси:

sudo apt install pip
pip3 install beautifulsoup4
#pip3 uninstall mitmproxy #uncomment if already installed
sudo pip3 install mitmproxy==3.0.4

sudo sysctl -w net.ipv4.ip_forward=1 #maybe facultative

Создайте скрипт модификатора python с именем insertJs.py: Следующий скрипт заменит $('html, body').animate({".encode('utf-8') на ;[].push({".encode('utf-8') на сайте, который содержит tfarjo

def response(flow):
    if 'tfarjo' in flow.request.url: #here filter url that you want modify
        #here make the replacement you want
        flow.response.content = flow.response.content.replace(
            "$('html, body').animate({".encode('utf-8'),
            ";[].push({".encode('utf-8')
        )

def read_file(filename):
    with open(filename) as f:
        return f.read()

Запустить mitmproxy с помощью скрипта-модификатора:

sudo mitmdump -p 8081 -s "insertJs.py"

kill chrome: file -> quit или "killall chrome" дважды

Теперь нам нужно настроить прокси, создать ярлык Chrome, добавив mitmproxy (на Linux Mint это правой кнопкой мыши на рабочем столе и создать новый модуль запуска):

/usr/bin/google-chrome-stable %U --proxy-server=127.0.0.1:8081

попробуйте на странице http не https, затем, если это работает, настройте https:

для хрома сделать то же самое и установить pem (возможно, факультативно) затем следуйте этим инструкциям https://superuser.com/questions/1083766/how-do-i-deal-with-neterr-cert-authority-invalid-in-chrome#answer-1083768

(Для Firefox проще просто щелкнуть мышью на своем ОС и https настроен)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...