Полезная информация

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

№72617-03-2017 12:51:05

Sality
Участник
 
Группа: Members
Зарегистрирован: 22-04-2013
Сообщений: 18
UA: Firefox 52.0

Re: Greasemonkey

yup пишет:

Sality
Как-то так:

Выделить код

Код:

var player, i, link, links = document.getElementsByClassName("postLink");
for (i = links.length-1; i >= 0; i--) {
  link = links[i];
  if ((link.nodename == "A") || (link.hostname == "youtu.be") || (link.hostname == "youtube.com") || (link.hostname == "www.youtube.com")) {
    player = document.createElement("iframe");
    player.src = "https://www.youtube.com/embed" + link.pathname + "?ecver=2";
    player.width = 640;
    player.height = 360;
    player.frameBorder = 0;
    player.allowFullscreen = true;
    link.parentElement.replaceChild(player, link);
  }
}

Большое Вам человеческое спасибо! Очень выручили :)

Выделить код

Код:

 || (link.hostname == "youtube.com") || (link.hostname == "www.youtube.com")

Этот часть кода вырезал, чтобы затрагивался только youtu.be. Ссылки вида *.youtube.com обрабатываются некорректно, но они и не нужны.
Написал это для тех, кто будет использовать этот код.

Еще раз благодарствую, настроение подняли :)

Отсутствует

 

№72726-03-2017 23:29:31

leshiy_odessa
Участник
 
Группа: Members
Зарегистрирован: 13-02-2009
Сообщений: 51
UA: Firefox 53.0

Re: Greasemonkey

Еще раз попрошу. Нужно разворачивать всё комментарии на dirty (показать комментарии от ....).

https://imgur.com/8scuWA9.png


P.S. Заранее огромное спасибо.

Отредактировано leshiy_odessa (26-03-2017 23:31:51)

Отсутствует

 

№72827-03-2017 02:39:09

leshiy_odessa
Участник
 
Группа: Members
Зарегистрирован: 13-02-2009
Сообщений: 51
UA: Firefox 53.0

Re: Greasemonkey

И совсем главная хотелка. :)

rutracker блокирует фреймы и получается что невозможно пользоваться RSS ридером — NewsFox.
Как бы заблокировать эту проверку?

http://i.imgur.com/N5EmLIi.png

Отсутствует

 

№72927-03-2017 04:06:27

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 393
UA: Seamonkey 2.40

Re: Greasemonkey

leshiy_odessa пишет:

Нужно разворачивать всё комментарии на dirty (показать комментарии от ....).

Например, так:

Выделить код

Код:

// ==UserScript==
// @name        d3
// @namespace   comments
// @include     https://gif.d3.ru/*
// @include     http://gif.d3.ru/*
// @version     1
// @run-at      document-idle
// @grant       none
// ==/UserScript==
function ClickComment() {
  var i, links = document.getElementsByClassName('b-comment__expand-button');
  for (i = links.length-1; i >= 0; i--) links[i].click();
  setTimeout(ClickComment, 1000);
}
setTimeout(ClickComment, 1);

Добавлено 27-03-2017 04:27:38

leshiy_odessa пишет:

Как бы заблокировать эту проверку?

Проверка там такая:

Выделить код

Код:

if ( top != self && !self.location.hostname.match(BB.allowed_translator_hosts) ) {
  $(function() {
    $('body').html('<center><h1><br><br>Похоже вас пытаются обмануть<br>frame\'s hostname: ' + self.location.hostname + '</h1></center>');
    throw new Error('in frame');
  });
}

BB.allowed_translator_hosts - это регулярное выражение /^(translate\.googleusercontent\.com)$/
Если туда засунуть что-то другое, то проверку можно обломать.
Но вот вопрос: а когда скрипт Greasemonkey запускать? Делать это до скриптов страницы смысла нет, так как то значение переменной страничный скрипт присваивает, и он просто затрёт наше значение. А после скриптов страницы уже поздно - показ во фрейме к этому времени будет обнаружен и заблокирован.
Разве что переменной self присвоить top... Но неизвестно, что при этом поломается. Пробовать надо.

Выделить код

Код:

// ==UserScript==
// @name        rutrackerRSS
// @namespace   rutrackerRSS
// @include     https://rutracker.org/*
// @include     http://rutracker.org/*
// @version     1
// @run-at      document-start
// @grant       none
// ==/UserScript==
window.self = window.top;

Отредактировано yup (27-03-2017 04:31:27)

Отсутствует

 

№73027-03-2017 13:12:52

leshiy_odessa
Участник
 
Группа: Members
Зарегистрирован: 13-02-2009
Сообщений: 51
UA: Firefox 53.0

Re: Greasemonkey

yup
Ааааа.... Дай я тебя расцелую :) НУ всё прямо в точку. rutrackerRSS заработал сразу. Это же #$&$% сколько я с ним мучался и пытался решить проблему самостоятельно.

Только d3 я поправил домены на — *.d3.ru/* Никак не могу понять зачем там setTimeout = 1000мс. Для перестраховки?

P.S. Спасибо всем за помощь. В ответ могу только отблагодарить своими знаниями в железе (любой глюк железа). Любой вопрос по выбору или настройке роутера пишите в личку.

Отредактировано leshiy_odessa (27-03-2017 13:15:31)

Отсутствует

 

№73127-03-2017 18:07:12

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 393
UA: Seamonkey 2.40

Re: Greasemonkey

leshiy_odessa пишет:

Только d3 я поправил домены на — *.d3.ru/* Никак не могу понять зачем там setTimeout = 1000мс. Для перестраховки?

Да. Эксперимент показал, что ссылки на ответы там не присутствуют на страничке изначально, а добавляются - скриптами странички - уже после того, как она получена, из-за чего даже @run-at document-idle не помогает. Нужно ждать, пока ссылки добавятся, и только потом их раскрывать.
Можно, конечно, просто выждать какое-то предопределённое время, например, две или три секунды (одной иногда было мало, проверял), и разово запустить процесс разворачивания ответов, но нет гарантии, что к этому времени добавление закончится (мало ли из-за чего оно застопорится...). Приходится тупо делать это раз в секунду всё время, пока страничка открыта - это и ждать начала процесса разворачивания ответов не очень долго, и в то же время браузер не очень грузит.
(Со ссылками в поисковой выдачей Google та же история, и до сих пор лучшего решения не нашлось.)

Отредактировано yup (27-03-2017 18:09:09)

Отсутствует

 

№73227-03-2017 20:28:07

leshiy_odessa
Участник
 
Группа: Members
Зарегистрирован: 13-02-2009
Сообщений: 51
UA: Firefox 53.0

Re: Greasemonkey

yup
Я тут конечно погарячкувал, решил сделать самостоятельно по аналогии разворачивания спойлеров в комментах youtube и обнаружил, что на d3.ru class называется не "b-comment__expand-button", а "b-comment__expand-button-container". Исправил в скрипте и он продолжает работать. Отсюда вопрос. Это джава скрипту пофигу, он ищет по началу имени или это у вас какой то другой хитрый способ, что вы нашли этот класс?

update Таки у меня получилось сделать по аналогии для youtube. Теперь красота.

Выделить код

Код:

// ==UserScript==
// @name        Youtube comments open spoiler
// @namespace   comments
// @include     https://youtube.com/*
// @include     http://youtube.com/*
// @include     https://www.youtube.com/*
// @include     http://www.youtube.com/*
// @version     1
// @run-at      document-idle
// @grant       none
// ==/UserScript==
function ClickComment() {
  var i, links = document.getElementsByClassName('yt-uix-button yt-uix-button-size-default yt-uix-button-link');
  for (i = links.length-1; i >= 0; i--) links[i].click();
  setTimeout(ClickComment, 1000);
}
setTimeout(ClickComment, 1);
Выделить код

Код:

/* --- Скрыть ответы --- */  
.yt-uix-expander-head.comment-replies-renderer-expander-up.comment-replies-renderer-hide,
/* --- Свернуть --- */
.yt-uix-button.yt-uix-button-size-default.yt-uix-button-link
{display:none !important}

update2 Пошли какие то подтормаживания. Походу я словил какой непрерывный цикл.

Отредактировано leshiy_odessa (27-03-2017 21:06:33)

Отсутствует

 

№73327-03-2017 21:08:07

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 393
UA: Seamonkey 2.40

Re: Greasemonkey

leshiy_odessa пишет:

обнаружил, что на d3.ru class называется не "b-comment__expand-button", а "b-comment__expand-button-container".

Нет. Класс ссылки - именно "b-comment__expand-button". А "b-comment__expand-button-container" - класс того <div>, в который эта ссылка вложена.

leshiy_odessa пишет:

Исправил в скрипте и он продолжает работать.

Что этот <div> на click() реагирует - ну, значит, создатели странички на него обработчик этого события навесили. Можно считать это случайностью и рассчитывать на подобное в других местах не стоит.

leshiy_odessa пишет:

Это джава скрипту пофигу, он ищет по началу имени или это у вас какой то другой хитрый способ, что вы нашли этот класс?

Функция getElementsByClassName() ищет по точному имени (точнее - по полному набору заданных имён).
А я класс ссылки нашёл элементарно - посмотрел с помощью Firebug в дереве DOM.

Отредактировано yup (27-03-2017 21:13:20)

Отсутствует

 

№73427-03-2017 21:50:44

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 393
UA: Seamonkey 2.40

Re: Greasemonkey

leshiy_odessa пишет:

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

1. YouTube и так неторопливый сайт. И если подгружать сразу кучу новых сообщений, да ещё одновременно с просмотром видео, то тормозов надо ожидать изначально.
2. Почему такой странный набор классов? У кнопки на подгрузку сообщений классы: "yt-uix-button yt-uix-button-size-default yt-uix-button-default load-more-button yt-uix-load-more comment-replies-renderer-paginator comment-replies-renderer-expander-down yt-uix-button-link", и на тестовой страничке, где я это посмотрел, таких объектов находится в 10 раз меньше, чем по тому урезанному набору, который использован в коде скрипта.
3. Бесконечный цикл реализован в самом скрипте - один проход в секунду. Но в отличие от кнопок подгрузки сообщений, которые исчезают после клацания, те объекты, которые получает нынешний код, никуда не деваются, и их много, так что время на них тратится на каждом проходе. Хотя я не думаю, что эта задержка будет как-то заметна.

Отредактировано yup (27-03-2017 21:58:43)

Отсутствует

 

№73528-03-2017 02:35:34

leshiy_odessa
Участник
 
Группа: Members
Зарегистрирован: 13-02-2009
Сообщений: 51
UA: Firefox 53.0

Re: Greasemonkey

yup пишет:

1. YouTube и так неторопливый сайт. И если подгружать сразу кучу новых сообщений, да ещё одновременно с просмотром видео, то тормозов надо ожидать изначально.

Я двигаю за ползунок и как бы спотыкаюсь/зависаю. То есть что то оно там делает уже после того как все комментарии развернуты.

update Подвисоны пропали, когда сделал двойной код: разворачивание комментариев + подгрузка других страниц — "Показать ещё". А когда вернул разворачивания спойлеров, то микро зависонны вернулись. Загадка.

yup пишет:

2. Почему такой странный набор классов? У кнопки на подгрузку сообщений классы: "yt-uix-button yt-uix-button-size-default yt-uix-button-default load-more-button yt-uix-load-more comment-replies-renderer-paginator comment-replies-renderer-expander-down yt-uix-button-link", и на тестовой страничке, где я это посмотрел, таких объектов находится в 10 раз меньше, чем по тому урезанному набору, который использован в коде скрипта.

Если быть точнее то у меня класс такой — yt-uix-button yt-uix-button-size-default yt-uix-button-default load-more-button yt-uix-load-more comment-section-renderer-paginator yt-uix-sessionlink.
Но не суть, потому что речь идет не про подгрузку комментариев, а про разворачивании спойлеров. Но идею воспринял, возможно оставлю. Но тогда браузер точно рухнет от количества комментариев на некоторых видео.

Отсутствует

 

№73628-03-2017 03:13:56

leshiy_odessa
Участник
 
Группа: Members
Зарегистрирован: 13-02-2009
Сообщений: 51
UA: Firefox 53.0

Re: Greasemonkey

Проблема вырисовывается. НА ютубе два вида спойлеров :

1. "Читать дальше" — yt-uix-button yt-uix-button-size-default yt-uix-button-link
2. "Показать ответы" — yt-uix-button yt-uix-button-size-default yt-uix-button-default load-more-button yt-uix-load-more comment-replies-renderer-paginator comment-replies-renderer-expander-down yt-uix-button-link

Если поставить первый, то всё спойлеры открываются, но идут подзависоны.
Если поставить одновременно, то первый спойлер ("Читать дальше") не срабатывает, второй работает и исчезают подзависоны.
Если их поменять местами, первым в скрипте поставить "Показать ответы", то всё срабатывает, но зависоны еще жестче.

Отсутствует

 

№73728-03-2017 07:03:45

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 393
UA: Seamonkey 2.40

Re: Greasemonkey

leshiy_odessa пишет:

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

Как-то так получилось, что на тех страничках, на которые я заглядывал в процессе нашего обсуждения, таких штуковин просто не было. Сейчас вот только впервые наткнулся.

Кнопки с набором классов "yt-uix-button yt-uix-button-size-default yt-uix-button-link" после нажатия не исчезают. И классы их не меняются. Просто на самом деле у каждого комментария есть две такие кнопки: "Читать дальше" и "Спрятать". И либо они обе невидимые (если комментарий короткий), либо видна только одна из них. При нажатии на видимую кнопку она становится невидимой, а другая - видимой.
А скрипт, в его нынешнем состоянии, тупо жмёт на все подряд раз в секунду.

Вот такой вариант предлагаю попробовать:

Выделить код

Код:

// ==UserScript==
// @name        Youtube comments open spoiler
// @namespace   comments
// @include     https://youtube.com/*
// @include     http://youtube.com/*
// @include     https://www.youtube.com/*
// @include     http://www.youtube.com/*
// @version     2
// @run-at      document-idle
// @grant       none
// ==/UserScript==
function ExpandComments() {
  var i, links = document.getElementsByClassName("comment-text-toggle-link read-more");
  for (i = links.length-1; i >= 0; i--) if (links[i].className != "comment-text-toggle-link read-more hid") links[i].click();
  setTimeout(ExpandComments, 1000);
}
setTimeout(ExpandComments, 1);

leshiy_odessa пишет:

Я двигаю за ползунок и как бы спотыкаюсь/зависаю. То есть что то оно там делает уже после того как все комментарии развернуты.

Я выхожу в Интернет с ноутбука с довольно маленьким экраном. На страничках YouTube в него помещается только окошко видеоролика и его название. Даже чтобы описание посмотреть - нужно ползунок вниз тянуть.
Но описание после прокрутки видно сразу, а комментарии, которые под ним расположены, - нет. Вместо них только надпись "Подождите". Комментарии на её месте появляются секунды через 3-4.
А когда вниз комментарии протягиваю, то по индикатору на вкладке видно, что браузер периодически ещё что-то из Интернета подтягивает.
И всё это - естественное поведение YouTube, без вмешательства каких-либо сторонних скриптов.

Отредактировано yup (28-03-2017 07:38:03)

Отсутствует

 

№73828-03-2017 16:30:28

leshiy_odessa
Участник
 
Группа: Members
Зарегистрирован: 13-02-2009
Сообщений: 51
UA: Firefox 53.0

Re: Greasemonkey

yup пишет:

Вот такой вариант предлагаю попробовать:

Вы забыли что два вида спойлера ( "Читать дальше" и "Показать ответы"). Два часа пытался их объединить. Один раз даже получилось, но появлялся глюк с вечным нажатием по не заданному классу. Прошу помощи.

update Прошла минута от ответа и у меня вышло. Чувствую себя индийским программистов копи пастой.


скрытый текст

Выделить код

Код:

/*
https://forum.mozilla-russia.org/viewtopic.php?pid=733851#p733851
*/
// ==UserScript==
// @name        Youtube comments open spoiler
// @namespace   comments
// @include     https://youtube.com/*
// @include     http://youtube.com/*
// @include     https://www.youtube.com/*
// @include     http://www.youtube.com/*
// @version     1
// @run-at      document-end
// @grant       none
// ==/UserScript==


/* ----- "Читать дальше"  ----- */
function ExpandComments() {
  var i, links = document.getElementsByClassName("comment-text-toggle-link read-more");
  for (i = links.length-1; i >= 0; i--) if (links[i].className != "comment-text-toggle-link read-more hid") links[i].click();


/* ----- "Показать ответы"  ----- */
  var i, links = document.getElementsByClassName("comment-replies-renderer-paginator");
  for (i = links.length-1; i >= 0; i--) if (links[i].className != "yt-uix-expander-head") links[i].click();
  setTimeout(ExpandComments, 1000);
}
setTimeout(ExpandComments, 1);

/* ПОДГРУЗКА ОСТАЛЬНЫХ КОММЕНТАРИЕВ — "Показать ещё". Если много комментариев, то выжирает всю память.
function ClickComment() {
  var i, links = document.getElementsByClassName('yt-uix-button yt-uix-button-size-default yt-uix-button-default load-more-button yt-uix-load-more comment-section-renderer-paginator yt-uix-sessionlink');
  for (i = links.length-1; i >= 0; i--) links[i].click();
  setTimeout(ClickComment, 1000);
}
setTimeout(ClickComment, 1);*/


Интересно а Java скриптом можно сделать такое? Скрыть классы.

.comment-replies-renderer-hide,
.comment-text-toggle-link.show-less
{display:none !important}


yup пишет:

А скрипт, в его нынешнем состоянии, тупо жмёт на все подряд раз в секунду.

Я это понял и пытался ночью переделать предыдущий ваш срипт.

update2 и тут до меня как до жирафа дошло, что нужно было переименовать вторую function  xpandComments() на function ExpandComments2(). Ну я и тупой. :(

Отредактировано leshiy_odessa (28-03-2017 18:51:05)

Отсутствует

 

№73928-03-2017 18:09:24

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 393
UA: Seamonkey 2.40

Re: Greasemonkey

leshiy_odessa пишет:

Вы забыли что два вида спойлера ( "Читать дальше" и "Показать ответы").

Нет, не забыл. Просто это достаточно независимые операции, а объединённого кода я не видел, поэтому не стал заниматься самодеятельностью и предложил только код по той проблеме, которая непосредственно обсуждалась.

leshiy_odessa пишет:

Интересно а Java скриптом можно сделать такое? Скрыть классы.

.comment-replies-renderer-hide,
.comment-text-toggle-link.show-less
{display:none !important}

Из JavaScript можно создавать новые стили, но доступ к существующим стилям есть только на чтение. Поэтому вариантов имеется два:
1. Создать в стилях новый класс с параметром "display:none" и назначить его всем скрываемым элементам.
2. Получить список всех элементов нужного класса и присвоить им  "display:none":

Выделить код

Код:

var i, elems = document.getElementsByClassName("comment-replies-renderer-hide");
for (i = elems.length-1; i >= 0; i--) elems[i].style.display = false;

Но через userContent.css оно как-то красивее и эффективнее.

Отсутствует

 

№74028-03-2017 18:47:45

leshiy_odessa
Участник
 
Группа: Members
Зарегистрирован: 13-02-2009
Сообщений: 51
UA: Firefox 53.0

Re: Greasemonkey

yup пишет:

2. Получить список всех элементов нужного класса и присвоить им  "display:none":

Я думал вы ошиблись с display = false, помозговал пол часа и вспомнил, что видел hide или none, потом потратил еще минут десять на кавычки. В итоге таки родил — for (i = elems.length-1; i >= 0; i--) elems[i].style.display = "none";
Начинаю писать вам ответ, нажимаю цитировать и вижу — none :)

Огромное вам спасибо за помощь и науку.

скрытый текст

Выделить код

Код:

/*
https://forum.mozilla-russia.org/viewtopic.php?pid=733851#p733851
*/
// ==UserScript==
// @name        Youtube comments open spoiler
// @namespace   comments
// @include     https://youtube.com/*
// @include     http://youtube.com/*
// @include     https://www.youtube.com/*
// @include     http://www.youtube.com/*
// @version     1
// @run-at      document-end
// @grant       none
// ==/UserScript==


/* ----- "Читать дальше"  ----- */
function ExpandComments() {
  var i, links = document.getElementsByClassName("comment-text-toggle-link read-more");
  for (i = links.length-1; i >= 0; i--) if (links[i].className != "comment-text-toggle-link read-more hid") links[i].click();

/* ----- "Показать ответы"  ----- */
  var i, links = document.getElementsByClassName("comment-replies-renderer-paginator");
  for (i = links.length-1; i >= 0; i--) if (links[i].className != "yt-uix-expander-head") links[i].click();
  setTimeout(ExpandComments, 1000);
}
setTimeout(ExpandComments, 1);

function HideClass() {
/* --- УБРАЛ КНОПКУ "Скрыть ответы" --- */
var i, elems = document.getElementsByClassName("comment-replies-renderer-hide");
for (i = elems.length-1; i >= 0; i--) elems[i].style.display = "none";
/* --- УБРАЛ КНОПКУ "Свернуть" --- */
var i, elems = document.getElementsByClassName("comment-text-toggle-link show-less");
for (i = elems.length-1; i >= 0; i--) elems[i].style.display = "none";
setTimeout(HideClass, 1000);
}
setTimeout(HideClass, 1);

/* ПОДГРУЗКА ОСТАЛЬНЫХ КОММЕНТАРИЕВ — "Показать ещё". Если много комментариев, то выжирает всю память.
function ClickComment() {
  var i, links = document.getElementsByClassName('yt-uix-button yt-uix-button-size-default yt-uix-button-default load-more-button yt-uix-load-more comment-section-renderer-paginator yt-uix-sessionlink');
  for (i = links.length-1; i >= 0; i--) links[i].click();
  setTimeout(ClickComment, 1000);
}
setTimeout(ClickComment, 1);*/

Отредактировано leshiy_odessa (28-03-2017 18:51:19)

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2011 Mozilla Russia
Язык отображения форума: [Русский] [English]