Как изменить скрипт на чужом сайте

как создать свой скрипт для сайта, внедрить js на чужой сайт, пример работы с Tampermonkey

Свой скрипт для чужого сайта

Даже для многих опытных пользователей интернета сайт представляется чем-то статичным, неизменяемым. Здесь имеется в виду чужой сайт – на который вы заходите с помощью своего браузера. Вы действительно не можете напрямую, к примеру, влиять на внешний вид ресурса, но вот опосредованные варианты присутствуют. Рассмотрим способы решения задачи.

Вот, к примеру, вам не нравится, что в блоке «Мои услуги» на моем блоге читающего программиста цвет заголовка не зеленый. Как можно его изменить?

Самый простой способ – это посмотреть исходный код страницы, скопировать его к себе на диск, изменить код (добавить style=»color: green;” к элементу zaglav) и затем открыть файл в браузере. Или можно в контекстном меню правой клавиши мыши выбрать пункт «Посмотреть код» (или «Посмотреть код элемента» – в зависимости от браузера) и задать стиль выбранного элемента: color: green;.

Эти способы очень просты, но по большому счету проблему они не решают: как только вы в следующий раз зайдете на мой блог upread.ru, цвет заголовка «Мои услуги» будет все также серо-фиолетовым, а не зеленым. Раз и навсегда заставить менять его цвет, а также самостоятельно менять внешний вид чужих сайтов можно с помощью другого способа. Итак, план действий:

  1. Ставим в свой браузер расширение под названием Tampermonkey.
  2. Добавляем новый скрипт:
  3. Заменяем код в нем на свой
    // ==UserScript==
    // @name         upread
    // @namespace    http://tampermonkey.net/
    // @version      1.0
    // @description  
    // @author       upread.ru
    // @match        http://upread.ru/*
    // @grant        none
    // ==/UserScript==
    'use strict';
    
    document.getElementById('myservices').style.color="green";
    
  4. Сохраняем и запускаем его.

Теперь, когда мы перейдем на любую страницу сайта upread.ru, заголовок «Мои услуги» будет окрашиваться в зеленый цвет. Этим занимается строка номер 12 — как можно заметить, это обычная строка с синтаксисом javascript. Именно ниже её (или вместо) уже надо писать свой код — то, чтобы исполнялось в вашем браузере на чужом сайте. Сайт, на котором будет работать скрипт задается в строке номер 7.

Возможности пользовательских скриптов от Tampermonkey на самом деле не ограничиваются изменениями внешнего вида сайта. С помощью них, в частности, можно создавать «роботов», делающих на сайтах онлайн игр рутинную работу, создавать онлайн переводчики и многое другое. Напоследок стоит отметить тот факт, что чужой сайт мы своим скриптом все же не меняем — все изменения происходят только в браузере с уже загруженным сайтом.


Автор этого материала — я — Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML — то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, javascript, tampermonkey, скрипты, браузер

I’m looking for a browser extension (Firefox, Chrome) allowing to replace a Javascript file on a live Web site to do some testing/hacking.

Basically, it should take a URL and load another one instead (locally or on a HTTP development server).

Any idea?

asked Jun 22, 2010 at 12:39

Grégoire Cachet's user avatar

Grégoire CachetGrégoire Cachet

2,5373 gold badges29 silver badges27 bronze badges

1

I think this is a task for a personal proxy. You can sniff traffic on the proxy and apply rules to modify requests/content

answered Jun 22, 2010 at 13:11

DmitryK's user avatar

DmitryKDmitryK

5,4721 gold badge21 silver badges32 bronze badges

1

The Opera browser has similar functionality:

  1. View source code of the page (Ctrl+U).
  2. Make some changes. Or paste and replace the entire file.
  3. Press Apply Changes in the toolbar (Ctrl+R).

For editing linked resources (such as javascript or CSS files), use the following approach:

  1. Open the linked resource in a new tab.
  2. View «source code» of the resource (Ctrl+U).
  3. Make some changes.
  4. Press Apply Changes in the toolbar (Ctrl+R).
  5. Return to the tab with the webpage and realod (Ctrl+R).

answered Aug 8, 2012 at 21:00

Tereza Tomcova's user avatar

Tereza TomcovaTereza Tomcova

4,8284 gold badges31 silver badges29 bronze badges

2

Alternatives:

  • Using chrome you can change code on the fly (Developer tools -> Sources tab) and just save it (command + s)
  • Use the LiveReload app that actually attaches an extension (that kind of does what you want) http://livereload.com/

This may not be the «exact» answer to your question, yet I almost sure one of those will do what you want to do.

answered Aug 10, 2012 at 9:54

phaistonian's user avatar

1

You can intercept and block requests in browsers. For example in Chrome you can use the beforeload event check if it’s a JS (event.target is script tag or event.url ends in .js) call event.preventDefault() and then load your own script instead.

I’m pretty sure there’s a similar way to do this in FF.

answered Aug 3, 2012 at 17:52

gblazex's user avatar

gblazexgblazex

48.6k12 gold badges96 silver badges89 bronze badges

There is https everywhere which lets you define rules for url rewrites. This should work on all request, including script requests.

Tamper data might do the job, but I don’t know how automated/permanent you can set it up.

And there is also an extension called redirector. I didn’t test that one. Potentially it only works on the address bar.

Update:

That is unfortunate. In that case probably a proxy is you only way. What about a firefox extension that is a proxy, like Foxyproxy

answered Aug 4, 2012 at 2:55

4

ColBeseder correctly brings up Fiddler (http://www.fiddler2.com/fiddler2/version.asp) as a solution to your issue.

Fiddler is perfectly capable of handling and decrypting HTTPS traffic as well — see the documentation on the page for how to configure it.

To directly answer the OP question, you can use the autoresponder feature in Fiddler to hack your production JS for testing.

Enable the autoresponder tab in Fiddler, making sure to leave pass through for unmatched requests checked, entering the URL of the JS files you want to substitute as the pattern. Select the response file from your local filesystem, and go to town!

See http://yuiblog.com/blog/2008/06/27/fiddler/ (bottom of article is most relevant) for an example.

answered Aug 9, 2012 at 23:21

Josh E's user avatar

Josh EJosh E

7,3802 gold badges31 silver badges44 bronze badges

You should probably consider robohydra, since it is specifically developed for your case. They do not support https yet, but they are open to including it in the future.

answered Aug 13, 2012 at 8:28

Nacho Coloma's user avatar

Nacho ColomaNacho Coloma

6,9052 gold badges39 silver badges43 bronze badges

Disclaimer: I’m the author of the software :-)

A different approach that might suit your usecase better is to use a RoboHydra-based development proxy. The idea here would be that you want to keep ALL Javascript files in your machine, and use another server simply as a backend. It’s great for eg. front-end developers that don’t want to have the whole backend installed in their machines.

You can see the documentation, tutorials and such at http://robohydra.org/, and have an article describing exactly that usecase at http://dev.opera.com/articles/view/robohydra-a-new-testing-tool-for-client-server-interactions/.

However, as of now it can’t proxy to HTTPS URLs, but that should be a trivial change that I intend to do soon anyway.

answered Aug 13, 2012 at 8:31

How about Greasemonkey?
That should be the thing you’re searching for!

answered Aug 3, 2012 at 13:53

Marvin Emil Brach's user avatar

5

I’m looking for a browser extension (Firefox, Chrome) allowing to replace a Javascript file on a live Web site to do some testing/hacking.

Basically, it should take a URL and load another one instead (locally or on a HTTP development server).

Any idea?

asked Jun 22, 2010 at 12:39

Grégoire Cachet's user avatar

Grégoire CachetGrégoire Cachet

2,5373 gold badges29 silver badges27 bronze badges

1

I think this is a task for a personal proxy. You can sniff traffic on the proxy and apply rules to modify requests/content

answered Jun 22, 2010 at 13:11

DmitryK's user avatar

DmitryKDmitryK

5,4721 gold badge21 silver badges32 bronze badges

1

The Opera browser has similar functionality:

  1. View source code of the page (Ctrl+U).
  2. Make some changes. Or paste and replace the entire file.
  3. Press Apply Changes in the toolbar (Ctrl+R).

For editing linked resources (such as javascript or CSS files), use the following approach:

  1. Open the linked resource in a new tab.
  2. View «source code» of the resource (Ctrl+U).
  3. Make some changes.
  4. Press Apply Changes in the toolbar (Ctrl+R).
  5. Return to the tab with the webpage and realod (Ctrl+R).

answered Aug 8, 2012 at 21:00

Tereza Tomcova's user avatar

Tereza TomcovaTereza Tomcova

4,8284 gold badges31 silver badges29 bronze badges

2

Alternatives:

  • Using chrome you can change code on the fly (Developer tools -> Sources tab) and just save it (command + s)
  • Use the LiveReload app that actually attaches an extension (that kind of does what you want) http://livereload.com/

This may not be the «exact» answer to your question, yet I almost sure one of those will do what you want to do.

answered Aug 10, 2012 at 9:54

phaistonian's user avatar

1

You can intercept and block requests in browsers. For example in Chrome you can use the beforeload event check if it’s a JS (event.target is script tag or event.url ends in .js) call event.preventDefault() and then load your own script instead.

I’m pretty sure there’s a similar way to do this in FF.

answered Aug 3, 2012 at 17:52

gblazex's user avatar

gblazexgblazex

48.6k12 gold badges96 silver badges89 bronze badges

There is https everywhere which lets you define rules for url rewrites. This should work on all request, including script requests.

Tamper data might do the job, but I don’t know how automated/permanent you can set it up.

And there is also an extension called redirector. I didn’t test that one. Potentially it only works on the address bar.

Update:

That is unfortunate. In that case probably a proxy is you only way. What about a firefox extension that is a proxy, like Foxyproxy

answered Aug 4, 2012 at 2:55

4

ColBeseder correctly brings up Fiddler (http://www.fiddler2.com/fiddler2/version.asp) as a solution to your issue.

Fiddler is perfectly capable of handling and decrypting HTTPS traffic as well — see the documentation on the page for how to configure it.

To directly answer the OP question, you can use the autoresponder feature in Fiddler to hack your production JS for testing.

Enable the autoresponder tab in Fiddler, making sure to leave pass through for unmatched requests checked, entering the URL of the JS files you want to substitute as the pattern. Select the response file from your local filesystem, and go to town!

See http://yuiblog.com/blog/2008/06/27/fiddler/ (bottom of article is most relevant) for an example.

answered Aug 9, 2012 at 23:21

Josh E's user avatar

Josh EJosh E

7,3802 gold badges31 silver badges44 bronze badges

You should probably consider robohydra, since it is specifically developed for your case. They do not support https yet, but they are open to including it in the future.

answered Aug 13, 2012 at 8:28

Nacho Coloma's user avatar

Nacho ColomaNacho Coloma

6,9052 gold badges39 silver badges43 bronze badges

Disclaimer: I’m the author of the software :-)

A different approach that might suit your usecase better is to use a RoboHydra-based development proxy. The idea here would be that you want to keep ALL Javascript files in your machine, and use another server simply as a backend. It’s great for eg. front-end developers that don’t want to have the whole backend installed in their machines.

You can see the documentation, tutorials and such at http://robohydra.org/, and have an article describing exactly that usecase at http://dev.opera.com/articles/view/robohydra-a-new-testing-tool-for-client-server-interactions/.

However, as of now it can’t proxy to HTTPS URLs, but that should be a trivial change that I intend to do soon anyway.

answered Aug 13, 2012 at 8:31

How about Greasemonkey?
That should be the thing you’re searching for!

answered Aug 3, 2012 at 13:53

Marvin Emil Brach's user avatar

5

Предисловие

Плагин Tampermonkey я обнаружил недавно и, боже, как же он хорош. А хорош он тем, что позволяет любой сайт подстроить под себя.

Tampermonkey — это плагин, позволящий писать пользовательские JS скрипты для вебсайтов.

С помощью него вы сможете:

  • Изменять содержимое сайта.
  • Посылать запросы на другие сайты.
  • Скачивать файлы.

А также, все то что возможно в Javascript, доступно и здесь. Хорошо, приступим к первому скрипту.

Пишем Hello World.

Сперва установите Tampermonkey.

  • Скачать для Firefox
  • Скачать для Google Chrome

Зайдите на сайт, к которому хотите прицепить скрипт. И нажмите «Создать новый скрипт»

У вас отроется редактор кода, с созданной основой скрипта.

Вставьте функцию

alert("Hello World");

После этого комментария

// Your code here...

И нажмите Ctrl+S, чтобы сохранить скрипт.

Теперь, перезагрузите страницу, к которой привязан скрипт.

Скрипт работает. Теперь разберем код.

Разбор простейшего скрипта

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://under-prog.ru/
// @icon         https://www.google.com/s2/favicons?domain=under-prog.ru
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Your code here...
    alert("Hello World");
})();

Комментарии находящийся в этом промежутке, называются заголовками пользовательского скрипта (Userscript header)

// ==UserScript==
   ...
// ==/UserScript==

Они содержат информацию о скрипте, а также, о специальных разрешениях. Имеют следующий вид.

// @name         имя_скрипта
// @namespace    пространство_имен_скрипта
// @version      вверсия
// @description  описание
// @author       имя_автора
// @match        url_сайта_на_котором_будет_воспроизводится_скрипт
// @icon         ссылка_на_иконку_скрипта
// @grant        дополнительные_разрешения

Также, стоит отметить, что иконку можно будет достать из base64 кода, например вот так.

// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==

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

Если вы хотите, применять скрипт для всех страниц данного сайта, а не только к одной. То, просто поставьте * в конце ссылки, в поле match.

// @match        https://under-prog.ru/*

Подробнее про userscript header, вы можете почитать в документации.

Далее идет функция.

(function() {
    'use strict';

    // Your code here...
    alert("Hello World");
})();

Фунуции подобного типа

(function() { ... })();

Вызываются в момент, загрузки скрипта на сайт.

'use strict';

Включаем строгий режим.

alert("Hello World");

При помощи функции alert, выводим сообщение на экран.

С основой разобрались, перейдем к чему-нибудь, более интересному.

Способы получения элементов в JS.

В JS есть 2 основных способа получения элемента:

  • Классический — через document.querySelector()
  • Библиотека JQuery — существовала до появления document.querySelector() в JS, за что заслужила популярность. Имеет более короткий синтаксис.

В данном гайде, я буду использовать классический метод.

Еще, для получения элемента используются 2 функции:

  • querySelector — принимает css-селектор в качестве аргумента. Возвращает, первый попавшийся элемент.
  • querySelectorAll — то же самое что и querySelector, но возвращает все найденные элементы в виде массива.

Css-селекторы я разбирал первом уроке этого курса.

Меняем содержимое сайта.

Получив элемент, с помощью querySelector, можно производить всевозможные манипуляции. Такие как:

  • Добавление elem2 в внутри element, в конце — element.append(elem2) или element.appendChild(elem2)
  • Добавление elem2 в внутри element, в началае — element.prepend(elem2)
  • Вставка elem2 перед element element.before(elem2)
  • Вставка elem2 после element element.after(elem2)

Также, можно создать новый элемент с помощью document.createElement(). Вот пример создания div‘а.

document.createElement('div');

Остальные типы элементов создаются по аналогии.

Что-бы получить доступ к html-коду элемента, используйте element.innerHTML.

let html_text = element.innerHTML //Получили код элемента
element.innerHTML = "<div>Новый код элемента</div>" //Изменили код элемента

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

Отправляем запрос на сайт.

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

Встраивание будете делать через appendChild. А вот информацию с сайта, будете получать путем отправки запроса на сайт.

Ниже, я привел пример подобного запроса.

let req = new XMLHttpRequest(); //Создаем обьект запроса
req.open('GET', link, true); //Настраиваем запрос
req.send(); //Отправляем запрос на сайт
req.onreadystatechange = function() { //Ответ получен
  if(req.readyState == 4 && req.status == 200) { //Если статус ответа, удовлетворительный
    let tmp = document.createElement('div'); //То создаем div элемент
    tmp.innerHTML = req.responseText; //Запоняем его внутренности полученными данными (html код сайта)
    //И дальше, парсим что нужно. 
    let cur_price = tmp.querySelector("div.current_price");
    console.log(cur_price);
  }
}

Все обьяснение в комментариях.

req.open имеет следующий синтаксис:

req.open('тип запроса', ссылка, ассинхронность);
  • Тип запроса — может быть GET или POST (в редких случаях DELETE, PUT, ).
  • Ссылка — задает ссылку на сайт.
  • Ассинхронность — если false, то запрос делается синхронно (последовательно), в противном — ассинхронно (парралельно).

Теперь вы знаете как посылать запросы. Двигаемся дальше.

Скачиваем файлы по ссылке.

Сперва, получим доступ к функции GM_download:

// @grant        GM_download

И используем её внутри функции.

GM_download({
         url:fileLink,
         name:fileName,
         saveAs:false
       });

Разберем аргументы этой функции.

  • url — ссылка на файл
  • name — имя файла, с расширением
  • saveAs — задает, нужно ли открывать окно, при скачивании файла.

Таким образом и скачиваются файлы.

Я прочитал статью, что дальше?

Дальше идите на сайт greasyfork.org. На данном сайте, обычные люди делятся своими скриптами, которые вы можете установить и, при желании, изучить.

Итоговый результат.

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Как изменить скрипт lua
  • Как изменить скриншот экрана на самсунге а32
  • Как изменить скриншот экрана на компьютере windows
  • Как изменить скриншот экрана на айфоне
  • Как изменить скриншот ставки

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии