Suche nach href mittels Javascript und jquery

Dieses Thema im Forum "Webentwicklung" wurde erstellt von t001, 22. August 2015 .

  1. 22. August 2015
    Hallo,

    ich fang einfach ma an^^ .

    Ich bin derzeit dabei mir Javascript anzueignen und hab mir als erstes Ziel gesetzt ein Greasemonkey-Script zu schreiben.
    Das Script soll für mich auf bs.to automatisch zur nächsten Folge schalten nach ablauf einer gesetzten Zeit.

    Ich habe mich dazu entschlossen den fertigen Link zur nächsten Folge, mittels Javascript zusammen zu bauen.
    Da das a href keine ID hat kann ich es nicht mit getElementById() ansprechen. ( Und ich keine passende Alternative gefunden habe )

    Syntax des Links: "bs.to/serie/serienname/staffelnr/folgenname/host-1"
    Beispiel: "bs.to/serie/Die-Simpsons/1/1-Es-Weihnachtet-Schwer/Streamcloud-1"
    Beispiel 2te Folge: "bs.to/serie/Die-Simpsons/1/2-Bart-wird-ein-Genie/Streamcloud-1"

    Wie man hier sieht ändert sich nur die Nummer der Folge und der Name.

    Da ich natürlich nicht immer den Namen der Folgen eintippen möchte, suche ich mittels des jquery selectors :contains denn Link der /serie/serienname/staffelnr/i+'-' enthält.
    Nur leider scheinter es schon hier da ich :contains einfach nicht zum laufen bekomme.

    Hier mal das bisschen was ich bis jetzt habe.

    Code:
    //==UserScript==
    // @name Burning Series
    // @namespace bs.to
    // @description Folgen Switcher
    // @include http://bs.to/serie/*
    // @require http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
    // @version 1
    // @grant none
    // ==/UserScript==
    
    var seriename;
    var staffelnr;
    var Anzahlfolgen;
    var laenge;
    var host;
    var url;
    var i;
    
    
    seriename = prompt ("Serien Name:", "");
    staffelnr = prompt ("Staffelnr:", "");
    i = prompt ("Start Folge:", "");
    Anzahlfolgen = prompt ("Anzahl aller Folgen:", "");
    laenge = prompt ("Länge:", "");
    host = prompt ("Host:", "");
    
    url = $('a:contains("'seriename + '/' + staffelnr + '/' + i + '-''")');
    alert(url);
    
    
    alert(url) gibt immer nur objekt Objekt zurück und nicht den kompletten Link.

    Vielleicht hat ja einer von euch schon mal mit :contains gearbeitet und kann mir meinen Fehler aufzeigen. Ich hoffe ich hab es einigermaßen verständlich formuliert.

    Danke schon mal<3

    mfg
    t001
     
  2. 23. August 2015
    AW: Suche nach href mittels Javascript und jquery

    Hallo,

    also zu nächst einmal ist es komplett überflüssig den Link zur nächsten Episode auszulesen. Dies liegt daran das der Episodenname ausschließlich für "schöne" URLs im Link enthalten ist. Daher wird dieser String auch komplett vom Seitenskript ignoriert. So reicht es wenn du lediglich die Episodennummer hochzählst.
    Hier mal Beispiel URLs die alle zum selben Ziel führen:
    Code:
    Ziel:
    http://bs.to/serie/Die-Simpsons/1/1-Es-Weihnachtet-Schwer/Streamcloud-1
    
    Möglichkeiten:
    http://bs.to/serie/Die-Simpsons/1/1-THIIIIIISSSS-ISSSS-SPAAARTAAA/Streamcloud-1
    http://bs.to/serie/Die-Simpsons/1/1-xyz/Streamcloud-1
    http://bs.to/serie/Die-Simpsons/1/1-beliebige-Zeichenkombination/Streamcloud-1
    
    Das bedeutet wenn du den Serien- und Anbieternamen kennst kannst du dir einfach Links zusammenbauen.
    Code:
    [COLOR="#FFA07A"]Simpsons[/COLOR] Staffel [COLOR="#FF0000"]5[/COLOR] Episode [COLOR="#00FF00"]10[/COLOR] bei [COLOR="#0000FF"]Streamcloud[/COLOR]:
    http://bs.to/serie/[COLOR="#FFA07A"]Die-Simpsons[/COLOR]/[COLOR="#FF0000"]5[/COLOR]/[COLOR="#00FF00"]10[/COLOR]-X/[COLOR="#0000FF"]Streamcloud[/COLOR]-1
    
    Natürlich ist damit das Suchen des korrekten Episodennamens per JS hinfällig, trotzdem will ich dir hier einige mögliche Wege aufzeigen:

    Zunächst ist :contains nicht der richtige Selektor da er nur Elemente auswählt die den angegeben Text enthalten (siehe jQuery Dokumentation). Das Linkziel ist jedoch nicht im Elementtext hinterlegt sondern im href-Attribut (<a href="serie/Die-Simpsons/1/5-Bart-schlaegt-eine-Schlacht">5</a>).

    Eine Möglichkeit wäre jetzt alle Links des Content-Bereichs zu selektieren und deren href-Attribute zu durchsuchen. Das würde dann bei Episode 5 in etwa so aussehen:
    Code:
    var count=0;
    $('#sp_left .pages a').each(function x(){ [COLOR="#808080"]//Alle Links selektieren und per each-Schleife durchlaufen[/COLOR]
     if(count==0){
     if($(this).attr('href').indexOf('[COLOR="#0000FF"]5[/COLOR]-')>-1){ [COLOR="#808080"]//Prüfen ob das href-Attribut den vorgegebenen String enthält[/COLOR]
     alert($(this).attr('href')); [COLOR="#808080"]//href-Attribut ausgeben[/COLOR]
     count++;
     }
     } else
     return false;
    });
    Soweit so gut aber doch etwas umfangreich.

    jQuery bietet uns jedoch auch die Möglichkeit Attributwerte direkt in den Selektor mit einzubauen. Hierzu ist diese Seite der jQuery-Dokumentation wohl ganz interessant. Um bei unserer Problemstellung also alle a-Elemente die im href-Attribut "/5-" (5. Episode) enthalten zu selektieren ist folgende Zeile nötig:
    Code:
    $('a[href*="[COLOR="#0000FF"]/5-[/COLOR]"]');
    Um jetzt noch das href-Attribut per alert-Box ausgeben zu lassen erweitern wir den Code wie folgt:
    Code:
    alert($('a[href*="[COLOR="#0000FF"]/5-[/COLOR]"]').attr('href'));
    Allgemein erleichtert man sich viel Arbeit wenn man etwas Überlegung in den jeweiligen Selektor setzt. Natürlich gibt es bestimmt noch 50 anderer Wege um zum Ziel zu kommen, dies waren jetzt einfach mal zwei die mir mit meinem begrenzten jQuery-Wissen eingefallen sind.
     
  3. 24. August 2015
    AW: Suche nach href mittels Javascript und jquery

    Erstmal vielen Dank du hast mir stark weitergeholfen und dafür das du mir die möglichen Wege aufgezeigt hast ,auch wenn es nicht mehr nötig war, das weiss ich sehr zu schätzen.

    Glaube ich muss mich noch viel mehr mit dem Thema Javascript auseinander setzten, konnte jetzt zwar den Aufruf der richtigen URLs umsetzen aber scheiter jetzt an dem Timer der die Funktion(nächste Folge) alle 21min aufrufen soll... dabei dachte ich eigentlich das wäre noch der einfache Teil ^^.

    Code:
    
    function switcher() {
     url = "/serie/"+seriename+"/"+staffelnr+"/"+i+"-yxz/"+host+"-1/";
     GM_openInTab(url);
     i++;
    }
    
    switcher();
    
    for (var j=i;j <= Anzahlfolgen;j++)
     {
     window.setTimeout(switcher, 60000*laenge);
     }
    
    
    Aus unerfindlichen Gründen wartet .setTimeout einmal die angebene Zeit und öffnet dann alle möglichen Tabs (folgen) auf einen Schlag. Das gleich passiert bei .setInterval könnte das ein Greasemonkey Bug sein oder bin ich einfach zu Dumm das richtig einzubauen?
     
  4. 24. August 2015
    AW: Suche nach href mittels Javascript und jquery

    Greasemonkey startet dein Script in jedem Tab der geöffnet wird.
    Somit öffnet jeder Tab einen neuen Tab der wieder einen neuen öffnet etz etz.
     
  5. 25. August 2015
    AW: Suche nach href mittels Javascript und jquery

    ne das konnte ich beheben dran liegt es nicht sonst würde er mir ja bei jedem Tab die prompt anzeigen.
    Hab vergessen meinen neuen Meta-Block mit rein zuschreiben.

    Code:
    // ==UserScript==
    // @name Change Episode
    // @namespace bs.to/serie/
    // @include http://bs.to/
    // @require http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
    // @version 1
    // @grant GM_openInTab
    // ==/UserScript==
    
    Das Problem liegt halt darin das er mir alle Tabs auf einen Schlag öffnet und nicht jeden Tab einzeln nach Ablauf der Zeit.
     
  6. 25. August 2015
    AW: Suche nach href mittels Javascript und jquery

    setTimeout nimmt immer "jetzt + millisekunden" daher fügen wir bei jedem durchlauf die länge erneut an
    Code:
    [==================GESAMT_LÄNGE================]
    [===FOLGE_01===]
     [===FOLGE_02===]
     [===FOLGE_02===]
    Code:
    var gesamtLaenge = 0;
    for (var j=i;j <= Anzahlfolgen;j++)
    {
     gesamtLaenge += 60000 * laenge; // addiere die länge dieser folge
     window.setTimeout(switcher, gesamtLaenge);
    }
     
  7. 28. August 2015
    AW: Suche nach href mittels Javascript und jquery

    Vielen Dank für eure Antworten ich konnte es nun mit 3 Scripts soweit realisieren das ich auf die Streamcloud Seite komme und der Button nach 10sec gedrückt wird so dass ich zu dem Video gelange.

    Code:
    // ==UserScript==
    // @name Change Episode
    // @namespace bs.to/serie/
    // @include http://bs.to/
    // @require http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
    // @version 1
    // @grant GM_openInTab
    // ==/UserScript==
    
    var seriename;
    var staffelnr;
    var Anzahlfolgen;
    var laenge;
    var host;
    var i;
    var url;
    
    
    seriename = prompt ("Serien Name:", "");
    staffelnr = prompt ("Staffelnr:", "");
    i = prompt ("Start Folge:", "");
    Anzahlfolgen = prompt ("Anzahl aller Folgen:", "");
    laenge = prompt ("Länge:", "");
    host = prompt ("Host:", "");
    
    function switcher() {
     url = "/serie/"+seriename+"/"+staffelnr+"/"+i+"-yxz/"+host+"-1/";
     GM_openInTab(url);
     i++;
    }
    
    switcher();
    
    var gesamtLaenge = 0;
    for (var j=i;j <= Anzahlfolgen;j++)
    {
     gesamtLaenge += 60000 * laenge; // addiere die länge dieser folge
     window.setTimeout(switcher, gesamtLaenge);
    }
    
    Code:
    // ==UserScript==
    // @name Klick the Hit
    // @namespace bs.to/serie/
    // @include bs.to/serie/*
    // @require http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js 
    // @version 1
    // @grant GM_openInTab
    // ==/UserScript==
    
    GM_openInTab($('a[href*="streamcloud.eu"]').attr('href'));
    
    Code:
    // ==UserScript==
    // @name Button Smash
    // @namespace bs.to/serie/
    // @include http://streamcloud.eu/*
    // @version 1
    // @grant none
    // ==/UserScript==
    
    window.setTimeout(Smash, 10000);
    function Smash()
    {
     document.getElementById("btn_download").click();
    }
    
    Nun muss ich nur noch herausfinden wie ich denn Videoplayer starten und auf Vollbild stellen kann.
    Ist es möglich mittels Javascript einen Klick an einer bestimmten Bildschirm Koordinate zu simulieren?
     
  8. 28. August 2015
    AW: Suche nach href mittels Javascript und jquery

    HTML:
    if (jwplayer) {
     jwplayer().play();
     jwplayer().setVolume(100);
    }
     
  9. 29. August 2015
    AW: Suche nach href mittels Javascript und jquery

    Besten Dank funktioniert wunderbar. Aber darf ich fragen wo du die Befehle gefunden hast bzw ob es eine Dokumentation darüber gibt damit ich mir das nochma anschauen kann? Würde mir gerne noch den Befehl für Vollbild raussuchen falls es einen gibt.

    Konnte leider bei Google nichts finden nur das es wohl zu jquery gehört.
     
  10. 29. August 2015
    AW: Suche nach href mittels Javascript und jquery

    Ich habe mein eigenes kleines Userscript für streamcloud ;-)

    Ich habe irgendwann mal den jwplayer im Quelltext entdeckt und dann auseinander genommen.
    jwplayer().setFullscreen() ist das was du suchst, allerdings schaltet der Browser nicht in den Fullscreen-Modus da die Funktion nicht vom User ausgelöst wurde.
     
  11. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.