Beiträge von Thomas S.
-
-
-
-
-
-
-
weil ich das SRF Video "Wie ein Eisenbahnwaggon Geschichte schrieb" herunterladen möchte
Hallo Wollie.
Videos vom SRF herunterladen ist eine etwas spezielle Angelegenheit, aber machbar.
Hintergrund ist auch die Frage, ob das legal ist oder nicht - dazu gibt es leider immer noch völlig konträre Positionen...
Am einfachsten geht dies ganz legal mit dem separaten Programm MediathekView, das in den Mediatheken frei zugängliche Videos übersichtlich zum Download auflistet.
Aber insbesondere die SRF erschwert häufig einen direkten Zugriff, längst nicht alle Videos, auch nicht der der selbst produzierten Nachrichten, sind in deren Mediathek verfügbar.
Man benötigt dann dazu zusätzliche separate Tools wie z.B. VLC oder yt-dlp (ist integriert in ytdlp-interface).
Und Kenntnisse, wie im FF selbst die url der "master.m3u8-Datei" (eine Wiedergabeliste für Video- und Audio-Dateien) aus dem Netzwerkstream herausgelesen wird.
Wegen der unklaren Rechtslage hier keine Anleitung.
Suche selber im www danach, es gibt die Informationen.
-
Bei mir sind es die AddOns uBlock und Enhancer for YouTube™, die von YT als Werbeblocker identifiziert werden.
Wenn ich eingeloggt bin, gibt es folgende Varianten:
1. beide aktiv -> keine Warnung, aber Player schwarz und gesperrt
2. nur uB -> keine Warnung, keine Sperre
3. nur Enhancer for YouTube™ -> Warnung im Player sichtbar und Player gesperrt
In Enhancer for YouTube™ hatte ich Werbung auch geblockt. Wenn ich da Werbung erlaube, geht es auch mit diesem AddOn.
Mal sehen, wie viel Werbung noch kommt...
EDIT: leider funktioniert Enhancer for YouTube™ nicht mehr, wenn ich angemeldet bin. Daran zu sehen, dass die Steuerleiste nicht mehr eingeblendet wird.
PS.: das bis vor ein paar Tagen sichtbare PopUp mit der Warnung sehe ich nicht mehr.
-
Der Hinweis kommt bei mir nur, wenn ich bei youtube angemeldet bin.
Und der Player ist auch nur dann gesperrt.
youtube kontrolliert die Verwendung und speichert die Daten wohl dann im Nutzerkonto.
Vermute, dass nur eine Verschleierung des Werbeblockers helfen wird, ein Filter jedoch nicht.
-
Ich habe es hinbekommen.
Allerdings ist die Lösung sicherlich mit Pflegeaufwand verbunden, falls sich irgend etwas an der Seite oder in FF ändert.
Als Grundlage diente das Userscript für den Menüeintrag "Google context search", denn da wird auch auf den Content zugegriffen.
Das kam jetzt dabei heraus: ein Button, der beim Anklicken die Artikelbeschreibung (den iFrame) eines beliebigen ebay-Angebots in einem neuen Tab öffnet. Es muss nichts ausgewählt werden, nur die Seite angezeigt werden. Wird nichts gefunden, passiert nichts. Die URL steht zusätzlich auch in der Zwischenablage.
JavaScript
Alles anzeigen// Open_iFrame.uc.js (function () { if (location != 'chrome://browser/content/browser.xhtml') return; let open_iFrame = function () { Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper).copyString("no iFrame") let browserMM = gBrowser.selectedBrowser.messageManager; browserMM.addMessageListener('getSelection', function listener(message) { let t = (message.data !== ''); if (t) { openWebLinkIn(message.data, 'tab'); Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper).copyString(message.data) }; browserMM.removeMessageListener('getSelection', listener, true); }); // gesuchte Selektoren für den speziellen Fall (beliebige ebay-Angebotsseite) let searchClassName = "vim d-item-description"; let searchTagName = "iframe"; let searchAttributName = "src"; // Fehler lassen sich so NICHT korrekt abfangen! try { // browserMM.loadFrameScript('data:,sendAsyncMessage("getSelection", content.document.getElementsByClassName("vim d-item-description")[0].getElementsByTagName("iframe")[0]?.getAttribute("src"))', true); browserMM.loadFrameScript('data:,sendAsyncMessage("getSelection", content.document.getElementsByClassName("' + searchClassName + '")[0].getElementsByTagName("' + searchTagName + '")[0]?.getAttribute("' + searchAttributName + '"))', true); Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper).copyString(message.data) } catch(e) {console.log ("Fehler:", e) }; // getestet wurden: // browserMM.loadFrameScript('data:,sendAsyncMessage("getSelection", content.document.getElementsByTagName("html")[0].innerText)', true); // browserMM.loadFrameScript('data:,sendAsyncMessage("getSelection", content.document.getElementsByTagName("html")[0].innerHTML)', true); // browserMM.loadFrameScript('data:,sendAsyncMessage("getSelection", content.document.body.parentElement.innerHTML)', true); // browserMM.loadFrameScript('data:,sendAsyncMessage("getSelection", content.document.getElementsByTagName("iframe")[0]?.getAttribute("src"))', true); // browserMM.loadFrameScript('data:,sendAsyncMessage("getSelection", content.document.documentElement.innerHTML)', true); // browserMM.loadFrameScript('data:,sendAsyncMessage("getSelection", content.document.body.innerHTML)', true); // browserMM.loadFrameScript('data:,sendAsyncMessage("getSelection", content.document.getElementsByClassName("vim d-item-description")[0].innerHTML)', true); }; try { CustomizableUI.createWidget({ id: 'open_iFrame-button', type: 'custom', defaultArea: CustomizableUI.AREA_NAVBAR, onBuild: function(aDocument) { var currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/"); var buttonicon = "iFrame.svg" var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton'); var props = { id: 'open_iFrame-button', class: 'toolbarbutton-1 chromeclass-toolbar-additional', label: 'Open iFrame in new Tab', tooltiptext: 'Open iFrame in new Tab', style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/icons/" + buttonicon) + '");', oncommand: '(' + open_iFrame + ')()' }; for (var p in props) toolbaritem.setAttribute(p, props[p]); return toolbaritem; } }); CustomizableUI.registerToolbarNode(tb); } catch(e) { }; // für einen eventuellen Contextmenü-Eintrag... /* let menuitem = document.createXULElement('menuitem'); menuitem.id = 'context-open_iFrame'; menuitem.setAttribute('label', 'TEST copy InnerHTML'); menuitem.setAttribute('tooltiptext', 'copy InnerHTML'); // menuitem.setAttribute('oncommand', '(' + open_iFrame.toString() + ')()'); menuitem.setAttribute('oncommand', '(' + open_iFrame + ')()'); menuitem.classList.add('menuitem-iconic'); // wer kein Icon möchte kann die nächsten drei Zeilen auskommentieren / löschen var currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/"); var buttonicon = "open_iFrame.png"; menuitem.style.listStyleImage = 'url("' + ("file:" + currentProfileDirectory + "/chrome/icons/" + buttonicon) + '")'; let refItem = document.getElementById('frame-sep'); refItem.parentNode.insertBefore(menuitem, refItem); */ })();
Ich habe einfach das gesamte Script mit meinen Kommentaren hier eingestellt.
Es ist noch nicht fehlerfrei, z.B. werden Fehler im Messagehandler nicht zurückgegeben, wenn z.B. die gesuchten Elemente nicht vorhanden sind. Zu sehen in der Konsole, sonst aber keine Auswirkung.
Zur freien Verwendung, wenn es interessiert.
-
Hallo 2002Andreas
Danke schon mal.
Durch display: block hast du das selber so erstellt.
War mir klar, aber nur so ging der verzögerte Einblendeffekt, was meine erste Idee war.
Deine Lösung hatte ich mit einem etwas anderen Selektor auch schon.
Aber irgendetwas fehlt da noch, entweder den Selektor noch anpassen - oder aber noch eine Bedingung wie ":focus"?
Bei mir flackert das Submenü recht stark, ist nicht stabil sichtbar, wenn ich die Maus darüber bewege.
-
Hallo, eine Frage an die CSS-Spezialisten.
Auf der Seite Kachelmannwetter.com gibt es eine für mich echt schreckliche Funktionalität, die mich extrem stört.
Oben ist blau hinterlegt eine Menüzeile, die beim Überfahren mit der Maus sofort ein Submenü aufklappt.
Das verdeckt dann aber Steuerelemente auf Seiten wie Regenradar (die Buttons in der Grafik), man kommt da erst heran, wenn man durch Herumgeeier mit der Maus das Menü wieder schliesst und die Steuerelemente sichtbar werden. Ich habe bereits ein wenig herumexperimentiert und festgestellt, dass das Submenü mit display: block / display: none beim Hovern sichtbar / unsichtbar gemacht wird.
Aber das hier (ein Beispiel für das Menü "Messwerte", id w10) in der userContent.css funktioniert leider nicht, ...
CSS
Alles anzeigen@-moz-document domain(kachelmannwetter.com){ .dropdown > #w10 { display: block; opacity: 0; transition: all .5s; transition-delay: 0s; } .dropdown:hover > #w10 { display: block; opacity: 1; transition: all .5s; transition-delay: 2s; } }
... weil das Submenü jetzt immer eingeblendet ist (auch mit opacity: 0 ist es im Vordergrund und verdeckt die Steuerelemente) und bei Hover nur sichtbar wird.
Ohne display: block gibt es keine Verzögerung, das Submenü wird wieder sofort angezeigt.
Im Grunde soll der Hovereffekt einfach "abgeschaltet" sein. Mir würde es reichen, zum Submenü auf einen Eintrag in der blauen Leiste zu klicken, wenn ich das benötigen sollte. Hatte das beim Spielen mit dem Inspektor schon hinbekommen, aber konnte das letztlich nicht mehr nachvollziehen. Ist es möglicherweise auch nicht, weil ich sehr viel da herumgeändert hatte...
Wer hat eine Idee? Danke!
-
Hallo alle und vielen Dank für die Vorschläge.
Im angesprochenen Fall "iFrame" ist es in der Tat wohl der einfachste Weg, über das Kontextmenü den iFrame separat weiter zu behandeln.
Dennoch hätte mich das sehr interessiert, wie man den html-Quellcode direkt bekommen kann. Es scheint aber tatsächlich nur per AddOn zu funktionieren, weil dazu bestimmte Berechtigungen nötig sind. Kenne mich da aber gar nicht aus, daher erledigt.
-
Hallo Sören, ich kenne mich ja nicht wirklich in dieser Sprache aus.
Selbst intensive Suche im www hat mir nicht Deine Vorschläge gezeigt.
Werde ich einfach mal testen. Hatte ja selbst überlegt und gefragt:
ob man die Attribute von im Quellcode eingebetteten Elementen auslesen kann.
Das wäre in der Tat viel einfacher.
Danke schon mal für die Vorschläge.
-
Danke schon mal für den netten Versuch - aber das, was ihr schreibt, ist mir doch bekannt...
Das ganze soll in einem Userscript ohne irgend eine Interaktion mit der Seite selbst geschehen.
Also meine Überlegung wäre:
1. Userbutton anklicken
2. aktuelle Seite (die des aktuellen Tabs) wird als html-Quellcode in Variable eingelesen -> das ist das eigentliche Problem
3. der Inhalt der var im Script ausgewertet (in diesem Fall nach der url des iFrames gefiltert, ist aber zweitrangig)
4. die url wird in einem neuen Tab geöffnet
Also nix markieren, Kontextmenü oder Inspektor - und auch nicht so, wie ich es zurzeit mache (ich habe das im FF bereits so mit dem externem Editor eingestellt, das der NP++ sich automatisch öffnet):
1. Quellcode im externen Editor NP++ öffnen und dort
2. die url per Makro suchen lassen
3. die gefundene url doppelt klicken
4. die url wird in einem neuen Tab geöffnet
Für mich ist das eine eher interessante Fragestellung: wie kommt man an den Quellcode neben den bekannten Methoden noch heran, und zwar von einem Userscript aus?
Das dürfte eine ziemlich schwierige Angelegenheit sein.
Die Größe der Site und die Menge an Daten ist da eher ein kleineres Problem.
Eine andere Variante wäre die Frage, ob man die Attribute von im Quellcode eingebetteten Elementen auslesen kann.
Ich habe aber keine Möglichkeit gefunden, den Code 'von außen' anzusprechen und auszulesen. Man kommt da so einfach nicht heran.
-
Hallo alle.
Gibt es eine Funktion / Möglichkeit, mit der man aus einem Userscript auf den Seiten-Quellcode des aktiven Tabs (nur lesend) zugreifen kann?
Eine Übernahme von reinem Text in eine Variable wäre dabei ideal.
Soweit ich es aber 'verstanden' habe, geht das nicht so ohne Weiteres, weil Content und Umgebung getrennt sind.
Aber vielleicht mit Hilfe der Zwischenablage?
Hintergrund ist die Suche im Quellcode nach der URL eines in der Site eingebetteten iFrames.
Ein Öffnen im externen Editor und dort mit Makro suchen geht schon mal.
Mit einem Toolbarbutton wäre das aber einfacher - falls möglich.
Mir fehlt dabei 'nur' die Funktionalität für den rein lesende Zugriff (den Rest bekomme ich dann hoffentlich hin).
-
Ich musste das Sript nochmal neu erfinden.
Grund war, dass das Verschieben des Buttons plötzlich zu einem unerwünschten Ergebnis führte: ich konnte ihn nicht mehr "greifen", um ihn nochmals woanders hin zu verschieben. Er lag hinter zwei anderen Buttons verdeckt...
War mir zu unsicher, und da er ohnehin nur fest ins Überhangmenü sollte, habe ich jetzt das hier am Start:
JavaScript
Alles anzeigen// Erweiterungen-Button_verschoben.uc.js (function() { if (location != 'chrome://browser/content/browser.xhtml') return; var extensionsButton = document.getElementById('unified-extensions-button'); var overflowMenuButton = document.getElementById('overflowMenu-customize-button'); var overflowMenuButtonParent = overflowMenuButton.parentNode; overflowMenuButtonParent.insertBefore(extensionsButton, overflowMenuButton); for (var i = 0; i < extensionsButton.childElementCount; i++) { if (extensionsButton.childNodes[i].className == "toolbarbutton-text") { extensionsButton.setAttribute('style', 'margin-top: unset'); extensionsButton.childNodes[i].style = 'text-align: left; padding-left: 6px'; extensionsButton.childNodes[i].value = 'Erweiterungen...'; break; } } //setTimeout(function() { // extensionsButton.setAttribute("label", "Erweiterungen..."); // extensionsButton.setAttribute("tooltiptext", "Erweiterungen..."); // document.getElementById('unified-extensions-button').setAttribute("label", "Erweiterungen..."); // document.getElementById('unified-extensions-button').setAttribute("tooltiptext", "Erweiterungen..."); //}, 10000); })();
Damit wird der originale Button vor den letzten Eintrag im Überhangmenü fest hin verschoben.
Sieht dann so aus:
Es gibt nur das bisher ungelöste Problem, den Tooltip-Text auch anzupassen.
Die Versuche mit verschiedenem Code (z.B. auch die oben auskommentierten) funktionieren nicht zuverlässig.
Aus der Konsole heraus geht es immer.
Liegt vermutlich an einer zeitlichen Überschneidung während des Ladens der Elemente.
Wenn jemand dazu noch eine Idee hat (z.B. eine definierte Warteschleife), bitte, gerne. Ist zwar nicht wirklich wichtig, aber dennoch interessant.
-
Geht das denn bei dir?
Jein.
Gleiches Verhalten, aber wenn man nur ein "Mousedown" macht und die Maus vom Menü in die Auflistung führt, geht es.
Da ich das nur sehr selten benötigen werde, bin ich zufrieden - auch wenn mir diese Änderung, dass AddOns nicht mehr in das Überhangmenü verschoben werden können, nicht wirklich zusagt. Aber was soll's.
-
wohin du den Button verschieben möchtest
In das Überhangmenü - dahin wollte er aber nicht...
-
Auch wenn der Button mal wieder entfernt wird, hier noch eine Möglichkeit ihn per Skript zu verschieben
Hallo 2002Andreas , vielen Dank für das Script.
Ich habe damit allerdings folgendes Problem gehabt:
Ich habe ständig zwei Fenster FF offen. Nur in einem wurde der Button wie gewünscht verschoben. Vermutlich ein Problem mit dem Timing beim FF Programmstart. Um das zu beheben, lasse ich den Timer im Script mit einem Delay von 100 ms laufen.
Zeile 37 lautet jetzt also }, 100);.
Damit funktioniert es zuverlässig.