Персонализация веб-страниц с GreaseMonkey
![](http://img.brin-designs.com/img/games/928/personalize-web-pages-with-greasemonkey.png)
Что такое GreaseMonkey?
GreaseMonkey - это расширение для Firefox, которое позволяет настраивать веб-страницы, которые вы посещаете на лету.
То есть он изменит страницу прямо в браузере.
Это позволяет по желанию изменять все страницы любого сайта: удалять ненужные элементы, редактировать HTML, добавлять HTML-код, изменять / добавлять / удалять JavaScript, изменять цвета, добавлять функции, увеличивать или уменьшить размер таблиц, форм и т.д ...
Пример 1
Этот скрипт изменит страницы Kioskea для увеличения поля сообщений на форумах.
// Этот скрипт находится в свободном доступе.
//
// == UserScript ==
// @name KIOSKEA-Forums
// @namespace ВЕБ-САЙТ
// @description Изменить веб-страницы ccm
// @include //ccm.net/*
// @include //www.commentcamarche.com/*
// @include //www.commentcamarche.net/*
// == / UserScript ==
(function () {
// Удаляет все вхождения элементов, чей XPath предоставляется из документа.
//
// Пример: удалить все таблицы, которые используют CSS-класс «toto»:
// removeElement ("// table [@ class = 'toto']");
функция removeElement (ElementXpath)
{
var alltags = document.evaluate (ElementXpath, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
для (я = 0; я { element = alltags.snapshotItem (i); element.parentNode.removeChild (элемент); // Удалить этот элемент из его родителя. } } // Удаляет атрибут из всех вхождений элементов, для которых предоставляется XPath. // (Все вхождения этих элементов обрабатываются.) // // Пример: удаляем bgcolor из всех // removeAttributeOfElement ('bgcolor', "// table [@bgcolor]") // Удалить фиксированную из всех таблиц или ячеек :: // removeAttributeOfElement ('width', "// table [@width] | // td [@width]") функция removeAttributeOfElement (attributeName, ElementXpath) { var alltags = document.evaluate (ElementXpath, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); для (я = 0; я alltags.snapshotItem (я) .removeAttribute (имя_атрибут); } // Установить атрибут из всех вхождений элементов в указанное значение. // Предыдущее значение этого атрибута отбрасывается. // (Все вхождения этих элементов обрабатываются.) // // Пример: установить до 80 столбцов для всех текстовых областей: // setAttributeOfElement ('cols', 80, "// textarea") Функция setAttributeOfElement (attributeName, attributeValue, ElementXpath) { var alltags = document.evaluate (ElementXpath, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); для (я = 0; я alltags.snapshotItem (i) .setAttribute (attributeName, attributeValue) } // Вставить свой собственный CSS в страницу. // Пример: не подчеркивать ссылку: // injectCSS ("a {text-ornament: none;}") функция injectCSS (cssdata) { head = document.getElementsByTagName ("head") [0]; style = document.createElement ("style"); style.setAttribute ("type", 'text / css'); style.innerHTML = cssdata; head.appendChild (стиль); } пытаться { // Расширение поля сообщения setAttributeOfElement ('lines', '40', "// textarea [@ name = 'message']"); setAttributeOfElement ( 'смещ_по_столбцам', '120', "// текстовое поле [@ имя = 'сообщение']"); // В списке обсуждений мы выделяем жирным шрифтом обсуждение, которое не получило никакого ответа. setAttributeOfElement ( 'стиль', 'начертание шрифта: жирный;', "// тд [текст () = '0'] /../ тд [1] / а"); } поймать (е) { alert («исключение UserScript: \ n» + e); } }) (); Самая важная часть сценария: Эти две строки изменяют размер (строки, столбцы) текстового поля (текстовой области), используемого для ввода сообщений (определяется как name = "message"). Он использует XPath (/ / textarea ...) для выбора элемента, с которым нужно действовать. XPath - это способ обозначить определенные элементы HTML-страницы, но его использование не является обязательным. Вы можете пройти через традиционные методы DOM (.GetElementsByTagName (), а затем выполнить цикл for и т. Д.). Этот скрипт также содержит эту строку: В области обсуждения форума это добавит смелые заголовки к обсуждениям, на которые не было дано ответа. XPath: - Выберите ячейки таблицы, содержащие текст «0» (td [text () = '0']) - Вернись на уровень - Мы продолжаем в первом - Мы выделим жирным шрифтом все ссылки (/ а), содержащиеся в этом Некоторые примеры: - Выберите все изображения: / / img - Выберите все изображения без границ: / / img [@ border = '0'] - Выберите все ссылки, указывающие на Google: / / a [@ href = '//google.com'] - Выберите Все ссылки на Google и содержат текст «Ссылка на Google: / / a [@ href = '//google.com» и содержит (., «Ссылка на Google»)] - Выберите все ссылки: / / а - Выберите только те изображения, которые ссылаются: / / a / img - Выберите только ссылки, непосредственно размещенные в ячейке таблицы: / / td / a - Выберите только первую ссылку, размещенную непосредственно в ячейке таблицы: / / td / a [1] - Выберите только последнюю ссылку, размещенную непосредственно в ячейке таблицы: / / td / a [last ()] - Выберите все ячейки таблицы, содержащие точный текст «Hello»: / / td [text () = 'Hello'] - Выберите все ячейки таблицы, содержащие (где-то в тексте) слово «Hello»: / / td [содержит (., «Привет»)] - Выберите все ячейки таблицы, начиная с текста «Hello»: / / td [начинается с (., «Привет»)] - Выберите все таблицы, содержащие ячейку, содержащую слово «foo»: / / td [содержит (., 'Привет')] /../ .. (Первый / .. обратно в - Выберите все ячейки во втором столбце таблицы: / / tr / td [2] - Выберите все ячейки в последнем столбце таблиц: / / tr / td [last ()] - Выберите ячейки в столбцах 1, 2 и 3 таблицы: / / tr / td [position () <= 3] - Выберите все таблицы с хотя бы одним атрибутом: / / таблица [@ *] - Выберите все таблицы с атрибутом width: / / table [@ width] - Выберите все таблицы шириной 400px: / / table [@ width = '400px'] - Выберите все теги, которые являются прямыми дочерями ячейки: / / td / * - Выберите все ссылки, которые непосредственно связаны с ячейкой: / / td / a - Выберите вторую ссылку прямого сына ячейки: / / td / a [1] - Выберите первый тег в ячейке, что это такое: / / td / * [1] - Выберите первый тег с атрибутом onload: / / td / * [@ onload] - Выберите тег, являющийся тегом после p в HTML-коде: / / p / follow :: a - Выберите теги, которые сразу девочек теги p: / / p / a - Выберите любой тэг, который содержится в тэге ap (независимо от глубины) / / p / Потомок :: а - Выберите все теги после тега p, но на том же уровне: / / p / follow-sibling :: a В Firefox вы можете использовать DOM Inspector, чтобы помочь вам найти элементы для выбора (CTRL + SHIFT + I). Вы также можете использовать расширение для проверки XPath выражений XPath. Скрипт ccm.user.js содержит 4 класса утилит для облегчения вашей жизни: removeElement (путь) : удалить элемент со страницы. removeAttributeOfElement (nomattribut Road) : удалить атрибут элемента. s etAttributeOfElement (nomattribut, value, path) : добавить или изменить атрибут элемента injectCSS () : внедрить свой собственный CSS в страницу. Путь - это путь элемента XPath. Примеры: Чтобы удалить мусор, это было бы: removeElement ('/ / td / span [@ class =' comment ']'); Чтобы удалить ячейку (td), содержащую этот блабла: removeElement ('/ / td / span [@ class =' comment '] / ..'); Чтобы удалить все комментарии, даже если они не находятся в ячейке таблицы, необходимо выполнить следующее: removeElement ('/ / span [@ class =' comment ']'); Чтобы удалить размер, указанный в этой таблице: removeAttributeOfElement ('width', '// table [@ bgcolor =' # ffe ']'); Чтобы принудительно установить ширину таблицы: setAttributeOfElement ('width', '100%', '// table [@ bgcolor =' # ffe ']'); Чтобы изменить шрифт по умолчанию на веб-странице: injectCSS ('body (семейство шрифтов: Verdana, без засечек;)'); Расширение GreaseMonkey: //addons.mozilla.org/fr/firefox/addon/748 Руководство GreaseMonkey: //diveintogreasemonkey.org/ Примечание : написание сценариев GreaseMonkey не всегда легко (он должен содержать Javascript, DOM, HTML, CSS и XPath, необязательно). Platypus - это расширение Firefox, которое позволяет автоматически генерировать скрипты GreaseMonkey: //addons.mozilla.org/fr/firefox/addon/737 Но Platypus имеет тенденцию генерировать код Javascript, который довольно медленный и громоздкий.
:
setAttributeOfElement ( 'строки', '40', "// текстовое поле [@ имя = 'сообщение']"); setAttributeOfElement ( 'смещ_по_столбцам', '120', "// текстовое поле [@ имя = 'сообщение']");
Пример 2
setAttributeOfElement ( 'стиль', 'начертание шрифта: жирный;', "// тд [текст () = '0'] /../ тд [1] / а"); }
( / .. ) ячейка (которая содержит заголовок) ( / td [1] ) , XPath
и / .. следующие даты на )
коммунальные услуги
removeElement ()
...
блаблабла ... removeAttributeOfElement ()
...
...
setAttributeOfElement ()
...
...
injectCSS ()
связи
Лучшие советы