Allegro Seller Info 0.1.12

Kilka zmian wprowadzonych właśnie na stronach Allegro wymusza poprawki w skrypcie i wydanie nowej wersji - 0.1.12.

Na stronach z listą ofert zaszły jakieś drobne zmiany w strukturze DOM elementu prezentującego aukcję (<article/>) - wyleciał jeden poziom zagnieżdżenia kontenerów. Zapewne w związku z tym, także dostęp do obiektu item zmienił swoje położenie w react-owych bebechach, bo ścieżka dostępu do niego wygląda teraz tak:

item = node[i].children.props.children[0].props.item;

Na stronie z opisem oferty znów nieco przebudowano boxy. Wcześniej, aby znaleźć miejsce wstrzyknięcia, wystarczyło poszukać elementu z ustawionym obramowaniem górnym. A obecnie nie ma już bordera, za to w docelowym pudełku istnieją fizyczne elementy linii (<hr/>), co też łatwo wykorzystać:

node = itemNode.getElementsByTagName('hr')[0].parentElement.previousElementSibling;

Na szczęście nie ma większych zmian i po tych modyfikacjach skrypt działa poprawnie.

Aktualna wersja zawiera także kilka poprawek do zmian jakie pojawiły się na Allegro znacznie wcześniej. Nie wpływały one zbyt negatywnie na działanie to jednak dopiero niedawno je poprawiłem, a dziś dołączyłem do bieżącego releasa.

Na listach ofert niektóre aukcje - obecnie chyba tylko licytacje oraz wszystkie z “Allegro Lokalnie” - mają specjalne oznaczenia - o typie i/lub czasie do zakończenia. A te “lokalne” wyświetlają nawet lokalizację sprzedającego!?

Element z tymi rzeczami dodawany był jako pierwszy w DOM-ie, przez co skrypt niesłusznie uznawał to za div z logiem sklepu i przesuwał w inne miejsce. Gdy przypadkiem zerknąłem do kodu strony, byłem zdziwiony, że jakiś element znów wylądował w moim kontenerze <asiXXX/>. Czyżby hack z nowym tagiem wprowadzony w wersji 0.1.8 przestał działać?

Finalnie okazało się, że to tylko działanie takiego tam naiwnego kodu służącego do wykrywania aukcji ze sklepu. Kod ten w istocie sprawdzał, czy pierwsze dziecko jest inne niż spodziewany nagłówek z tytułem. Można byłoby to jakoś bardziej “o-if-ować”, ale odkryłem, że w obiekcie item.seller dla sklepowych ofert pojawia się pole brandzone zawierające logo i/lub nazwę, więc grzech z tego nie skorzystać.

if (item.seller.brandzone)
	node.lastElementChild.appendChild(node.firstElementChild);

Na szczęście, niezależnie od innych nowych elementów i wstawek, te brandowe elementy nadal dodawane są jako pierwsze dziecko, co ułatwia ich “obsługę”.

Zresztą podobnie z dodaną lokalizacją w ogłoszeniach pochodzących z “Allegro Lokalnie”. Tagi te zawsze są przedostatnim potomkiem, więc można je również po chamsku potraktować.

if (item.vendor == 'allegro_lokalnie')
	node.parentElement.removeChild(node.parentElement.lastChild.previousElementSibling);

W tym przypadku usunąć, bo w końcu mój skrypt robi dokładnie to samo. Tyle, że dla wszystkich aukcji i to w bardziej spójny z resztą strony sposób ;)

Jak zawsze, aktualna wersja dostępna w moim repozytorium UserScripts. W czasie czytania tej notatki, twój skrypt powinien już zostać zaktualizowany, o ile korzystasz z silnika wspierającego auto-aktualizacje skryptów.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *