piątek, czerwca 02, 2023

Ile z obligacji... odsłona 2 ;-)

Pisałem tutaj kilka dni temu o bookmarklecie, który sobie zbudowałem do sprawdzania ile w tym i przyszłym miesiącu dostanę z obligacji.

Największym problemem mojego narzędzia było to, że nie dawało sobie rady ze zmienieniem liczby obligacji... 

Do czasu ;-)

Spytałem ChatGPT ;-) (Google też pytałem, ale nie było takie mądre) takim tekstem: "there is web page I'm writing bookmarklet, and I want to change number of elements in table, normally I would go with mouse and click on select element and choose instead of 20, value 50 and this would do a trick, how to do the same with JavaScript"

I poradził by użyć dispatchEvent ;-)

Więc mam teraz taki kod:

var selector = document.getElementsByTagName("select")[0];
selector.value="50";
var event = new Event("change");
selector.dispatchEvent(event);

Który to kod najpierw znajduje pierwszy selektor na stronie, ustawia wartość na 50, i teraz najważniejsze, którego nie umiałem zrobić sam :-)
Wysyła event "change" :-)

Oczywiście to powoduje, że coś się tam musi pobrać i nie mogę zrobić mojej reszty machlojek...

Stąd wrzuciłem większość kodu do metody doMagic() ;-) i mam takie coś:

function doMagic() {
var downSelector = document.getElementsByTagName("select")[1];
if (downSelector.value!="50") {
setTimeout(doMagic,100);
return;
}

A na samym dole kodu:


setTimeout(doMagic,100);

i dzięki temu 100 ms po wykonaniu manewru ze zmianą selektora uruchamia się kod w doMagic, który w pierwszym kroku sprawdza wartość w drugim selektorze :-)
Jeśli nie jest 50 to znów próbuje za 100 ms :-)

Jakby ktoś chciał to tutaj bookmarklet: ile odsetek w tym i przyszłym miesiącu?

OK, chociaż tak naprawdę kod jest ciut bardziej skomplikowany ;-) bo np. ten selektor jest widoczny tylko jak się ma minimum 20 emisji ;-) i może, jak się ma więcej niż 50 emisji to jest większa wartość możliwa do wybrania? ;-)
Stąd mój kod jest teraz ciut bardziej skomplikowany ;-)

Bo wygląda teraz mniej więcej tak:

var expectedNumber = null;
var selectors = document.getElementsByTagName("select");
if (selectors.length>0) {
var selector = document.getElementsByTagName("select")[0];
var max = selector[selector.options.length-1].value;
expectedNumber = max;
selector.value=expectedNumber;
var event = new Event("change");
selector.dispatchEvent(event);
}

function doMagic() {
if (expectedNumber!=null) {
var downSelector = document.getElementsByTagName("select")[1];
if (downSelector.value!=expectedNumber) {
setTimeout(doMagic,100);
return;
}
}

Czyli najpierw sprawdza czy w ogóle są jakieś selektory, jak nie ma to po prostu olewa zmianę liczby obligacji na stronie i czekanie... jak jednak selektor istnieje to wybiera największą (tak naprawdę ostatnią na liście) wartość z selektora, po czym sprawdza co jakiś czas czy ustawiona jest ta wartość....

Teraz jedynym założeniem jest, że to są 4 letnie obligacje.... i już wiem jak to shackować ;p trzeba spojrzeć na pierwszą literę nazwy emisji ;-)



Podobne postybeta
Jak z metody size() w List w Java'ie dostać ujemną liczbę? ;-)
Bookmarklet do robienia CSV z obligacjami i ich oprocentowaniem ;-)
Ile w tym i przyszłym miesiącu z odsetek za obligacje?
Umiejętność programowania pomaga :-)
[Updated] Czytanie Pocketa ;-)

Brak komentarzy:

Prześlij komentarz