Allegro Seller Info 0.1.15
• tech • 292 słowa • 2 minuty czytania
Po 3 dniach kolejne wydanie allegrowego skryptu użytkownika, bo dziś znów coś na stronie uległo zmianie…
Na listach ofert przestały wyświetlać się informacje o sprzedającym. Na szybko ustaliłem, że zmieniono coś w strukturze i identyfikatorach elementów. Nie ma już kontenera #opbox-listing--base, za to jest .opbox-listing. Niestety elementów z taką klasą jest więcej, więc nie będzie to prosta aktualizacja selektora.
Tym razem trzeba dodać trochę więcej kodu, bo interesuje mnie ten kontener, w którym to znajdują się oferty zapakowane w <article/>. Gdyby przeglądarki wspierały już pseudo-klasę :has(), to pewnie taki selektor mógłby zadziałać:
// strona z lista aukcji
const listing = document.querySelector('.opbox-listing:has(article)');
Niestety nie ma lekko i trzeba to zrobić po staroświecku. Co nie znaczy, że nie da się tego zwięźle zapisać ;)
// strona z lista aukcji
const listing = Array.prototype.filter.call(
document.getElementsByClassName('opbox-listing'),
e => e.getElementsByTagName('article').length > 0
).pop();
Poprzednio (0.1.15) wprowadzone poprawki z pobieraniem lokacji użytkownika na stronach ofert nie do końca spełniają swoją rolę. W pewnych okolicznościach cała zawartość innerText wpada do zmiennej.
Pomyślałem, że skoro te elementy od dawna generowane i wyświetlane są jako warstwy, to może jakiś react-owy komponent w tym uczestniczy i z jakiś “propsów” wydobędę “czyste” dane bez zabawy w parsowanie i regex-y… no i znalazłem!
// pobierz lokalizacje z Opcji dostawy
var node = document.getElementsByClassName('opbox-showoffer-delivery')[0].firstElementChild;
var item = getReactInst(node);
if (!item || !item.pendingProps || !item.pendingProps.offerLocation)
return;
var loc = item.pendingProps.offerLocation;
if (loc.endsWith(', Polska'))
loc = loc.substr(0, loc.length - 8);
Kod do pobierania instancji komponentu Reacta wrzuciłem do osobnej funkcji (getReactInst), która zwraca obiekt spod pola return. Wydaje się to lepsze niż return.stateNode, gdyż nie zawsze jest on dostępny i podobnie jak props i pendingProps niekoniecznie zawiera jakieś dane. A tak będzie można specyfikować “ścieżkę” zależnie od potrzeb.
Nowa wersja dostępna jest już w moim gicie UserScripts.
Komentarze (0)