Vollständige Version anzeigen : Suche nach href mittels Javascript und jquery


t001
22.08.2015, 22:33

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.


//==UserScript==
// ;name Burning Series
// ;namespace bs~to
// ;description Folgen Switcher
// ;include ;bs~to/serie/*
// ;require ;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

Hardware Preisvergleich | Amazon Blitzangebote!

Videos zum Thema
Video Loading...
dreamax
23.08.2015, 22:50

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:

Ziel:
;bs~to/serie/Die-Simpsons/1/1-Es-Weihnachtet-Schwer/Streamcloud-1

Möglichkeiten:
;bs~to/serie/Die-Simpsons/1/1-THIIIIIISSSS-ISSSS-SPAAARTAAA/Streamcloud-1
;bs~to/serie/Die-Simpsons/1/1-xyz/Streamcloud-1
;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.

Simpsons Staffel 5 Episode 10 bei Streamcloud:
;bs~to/serie/Die-Simpsons/5/10-X/Streamcloud-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 (;api;jquery~com/contains-selector/)). 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:

var count=0;
$('#sp_left ;pages a');each(function x(){ //Alle Links selektieren und per each-Schleife durchlaufen
if(count==0){
if($(this);attr('href');indexOf('5-')>-1){ //Prüfen ob das href-Attribut den vorgegebenen String enthält
alert($(this);attr('href')); //href-Attribut ausgeben
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 (;api;jquery~com/attribute-contains-selector/) 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:
$('a[href*="/5-"]');

Um jetzt noch das href-Attribut per alert-Box ausgeben zu lassen erweitern wir den Code wie folgt:

alert($('a[href*="/5-"]');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.


t001
24.08.2015, 14:36

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 ^^.



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?


Nanobyte
24.08.2015, 17:50

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.


t001
24.08.2015, 23:33

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.


// ==UserScript==
// ;name Change Episode
// ;namespace bs~to/serie/
// ;include ;bs~to/
// ;require ;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.


Nanobyte
24.08.2015, 23:43

setTimeout nimmt immer "jetzt + millisekunden" daher fügen wir bei jedem durchlauf die länge erneut an
[==================GESAMT_LÄNGE================]
[===FOLGE_01===]
[===FOLGE_02===]
[===FOLGE_02===]


var gesamtLaenge = 0;
for (var j=i;j <= Anzahlfolgen;j++)
{
gesamtLaenge += 60000 * laenge; // addiere die länge dieser folge
window;setTimeout(switcher, gesamtLaenge);
}


t001
28.08.2015, 12:24

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.


// ==UserScript==
// ;name Change Episode
// ;namespace bs~to/serie/
// ;include ;bs~to/
// ;require ;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);
}



// ==UserScript==
// ;name Klick the Hit
// ;namespace bs~to/serie/
// ;include bs~to/serie/*
// ;require ;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'));



// ==UserScript==
// ;name Button Smash
// ;namespace bs~to/serie/
// ;include ;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?


Nanobyte
28.08.2015, 12:36

if (jwplayer) {
jwplayer();play();
jwplayer();setVolume(100);
}


t001
29.08.2015, 00:32

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.


Nanobyte
29.08.2015, 01:08

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.


Ähnliche Themen zu Suche nach href mittels Javascript und jquery
  • [Javascript] window.location.href geht nicht in einer function, warum?
    hallo zusammen, irgendwie klappt das nicht, aber warum. hab ein submit button, der eine function aufrufen soll. darin befindet sich ein window;location;href. das wird aber nicht ausgeführt warum. das script wie das im groben abläuft hab ich beigefühgt. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4 [...]

  • [JavaScript] location.href funzt im IE6 nicht
    hat sich erledigt. Auf einmal funzt es. Seltsam [...]

  • [JavaScript] location.href funktioniert nicht
    Hallo Forum, Ich versuch gerade eine einfache JS Verlinkung zu machen und irgendwie funktioniert das nicht... Folgende Treads hab ich schon gefunden: (;;;php~de/html-usability-und-barrierefreiheit/33833-erledigt-window-location-href-mit-firefox;html) (;phpforum~de/archiv_29507_Problem;Firefo [...]

  • [JavaScript] Website nach unten scrollen lassen mit Jquery
    Hallo, ich versuche mit jquery meine Seite nach unten scrollen zu lassen. Der Befehl soll nach jedem Klick ausgeführt werden. Habe das bis jetzt so gelöst: $(document);ready(function() ); }, 3000); return false; }); Der Timeout ist dafür da, weil auf der Page noch [...]



raid-rush.ws | Imprint & Contact pr