Allegro Seller Info 0.1.2

tech • 439 słów • 3 minuty czytania

Mój user script do małego usprawnienia Allegro (Allegro Seller Info) użytkowany jest bardzo intensywnie i działa bez zarzutu. Choć ostatnio przypadkiem natrafiłem na mały błąd, który w pewnych okolicznościach psuje jego działanie. Błąd naprawiłem, a przy okazji wprowadziłem drobne poprawki w kodzie… i przeniosłem do dedykowanego repo.

Kilka dni temu zdziwiło mnie niedodawanie lokalizacji na stronach aukcji. Nie mogłem wygłówkować skąd to się bierze. Czyżby Allegro już coś pozmieniało? Ale nie, bo struktura strony taka sama, istotne elementy DOM tak jak były, mój kod się nie wywala… co jest grane?

Po małym debugowaniu okazało się, że przy filtrowaniu dzieci w poszukiwaniu elementu z ustawionym obramowaniem, pobranie wartości dla border-top-width z computedStyleMap zwraca mi nie spodziewane 1 dla 1px tylko zmiennoprzecinkowe 0.9943181872367859.

To dosyć ciekawe, czyżby ostatnia aktualizacja Chrome miała w tym jakiś udział? Jednak nie, w rzeczywistości powód takiego działania okazał się trywialny. Jakimś cudem zmieniło mi się powiększenie stron na Allegro do 110%. A przy nieskalowalnych ustawieniach powiększenia mogą wychodzić takie niecałkowite wartości.

Szybka i prosta poprawka:

node = [...node.children].filter(n => {
	return n.computedStyleMap().get('border-top-width').value != 0;
})[0].previousElementSibling;

Nie ma potrzeby bazować na kontentej wartości stylu, w tym przypadku wystarczy sam fakt jego ustawienia ;)

Przy okazji nie podobały mi się zakodowane na stałe nazwy klas stylów używanych w skrypcie. Chociaż małe szanse, że takowe będą jakoś interferować z oryginalnym kodem strony, to jednak pokusiłem się o bardziej randomowe ich wartości. Oczywiście jak najprościej, więc dorzuciłem taką małą funkcję do skryptu:

function randomClassName() {
	return 'asi' + (+new Date).toString(36);
}

Na pewno poprawi to trochę losowość i unikalność używanych w kodzie identyfikatorów.

W ostatniej chwili przy testowaniu skryptu przed jego przenosinami do nowego repo (o czym dalej) napotkałem na pierwszą zmianę i przetasowania na stronie. Coś się stało, że interesujące mnie elementy z “nagłówka” aukcji, które wcześniej zawierały się w kontenerze z atrybutem itemprop="offers", przemieściły się poziom wyżej w hierarchii. I teraz “leżą” obok rzeczowego div-a, a on sam zawiera tylko kilka elementów z meta-informacjami.

Także punkt startowy do poszukiwań miejsca wstawki ulega zmianie:

node = document.querySelector('div[itemprop="offers"]').parentElement;

Jestem ciekawy czym spowodowane zostały te zmiany na stronach Allegro w opisach aukcji.

Wprowadzone poprawki do skryptu skutkują podbiciem wersji do 0.1.2.

Nowa wersja dostępna już jest w repo UserScripts. Postanowiłem dla swoich skryptów UserJS (bo mam nadzieję, że jeszcze nie jeden powstanie) wygospodarować osobne, dedykowane miejsce na moim githubie. Tam będę pakował całą swoją aktywność związaną ze skryptami użytkownika.

Repozytorium będzie zawierać zawsze najnowsze wersje, a to ułatwia automatyczną aktualizację skryptów. Oczywiście jeśli użytkowane rozszerzenie przeglądarki na to pozwala. W skryptach będą zawarte odpowiednie metadane (przynajmniej @downloadURL), więc kolejne wersje allegro-seller-info.user.js i innych moich wynalazków, powinny się już same aktualizować :)

Komentarze (0)

Dodaj komentarz

/dozwolony markdown/

/nie zostanie opublikowany/