Wyszukiwanie elementów z dynamicznym id

0

Hej, mam pewien problem z utworzeniem mini skryptu do środowiska pracy, który klikałby za mnie w niektóre elementy. Problem w tym, że nazwy te są dynamiczne i za każdym razem zmieniają swoje ID. Np.

document.querySelector("#\\31 16557\\:0").click ----> wskazuje i klika na checkbox, ale po odświeżeniu strony lub załadowaniu innej sprawy przyjmie inną nazwę np. #\\54 22353\\:1 i wtedy querySelector() nie znajdzie tego checkboxa. Używałem rownież document.querySelector("[type='checkbox']").click ale to działa może raz na 5 razy więc nie jest dobre. Jakiś sposób by to zrobić?

2

Możesz skorzystać z innych atrybutów, żeby stworzyć selektor

<form id="x8aQsz3456" class="login-form">
   ...
   <input id="e8131QSXzxfqw" type="checkbox" name="remember-me">
</form>

<script>
  const rememberMe = document.querySelector('.login-form input[name="remember-me"]');
</script>

lub wykorzystać bezpośrednio API na danej stronie jeśli z jakiegoś korzysta.

0

Nie orientuję się na jakiej zasadzie działa strona poza tym, że jest bardzo nieczytelna. To software Salesforce, które jest znane z tego, że to badziew programistyczny. Mój checkbox nie ma stałego ID, name czy w ogóle cokolwiek prócz tego, że istnieje jako obiekt. Tak to wygląda, nie mogę dać id=12345 bo się zmienia.
Podobnie ma się sprawa z comboboxami, które też są dynamiczne i nie można wybrać pozycji z listy.
screenshot-20230103113826.png

screenshot-20230103113811.png
screenshot-20230103113849.png

1

a kolejność? Np. Piąty input w trzecim divie na stronie?

A zawartość tekstowa (widoczna dla użytkownika)? Np. sprawdzić czy zawiera konkretne slowo, zdanie.

Albo sprawdzić czy jest tak i tak ostylowany (getComputedStyle)

Oczywiście mogą to być rzeczy efemeryczne i przy nowej wersji programu mogą przestać działać.

0

To ciężki software, ma setki elementów na stronie, które są ładowane z dynamicznie tworzonych elementów po kliknięciu. Nie ma stałej nazwy, idealnie byłoby tylko mieć wildcards w query:
document.QuerySelector("input=["XXXX:X"]'').click gdzie X to dowolne cyfry od 0 do 9 w takim układzie.

1

A co robisz jako użytkownik, żeby kliknąć w ten element? Bo skoro jako człowiek jesteś w stanie ustalić, gdzie masz klikać, to znaczy, że nie jest to całkiem losowe i da się jakoś ustalić algorytm. Może należałoby to odtworzyć za pomocą skryptu.

Poza tym nie ograniczałbym się do samego querySelector, to może być tylko wstęp do dalszej filtracji. Chociaż wtedy querySelectorAll bardziej, żeby zwróciło ileś kandydatów (np. ileś inputów, które być może są tym inputem, którego szukasz). Ew. XPath: https://developer.mozilla.org/en-US/docs/Web/XPath

0
sdkjfsdkafbkh napisał(a):

To ciężki software, ma setki elementów na stronie, które są ładowane z dynamicznie tworzonych elementów po kliknięciu. Nie ma stałej nazwy, idealnie byłoby tylko mieć wildcards w query:
document.QuerySelector("input=["XXXX:X"]'').click gdzie X to dowolne cyfry od 0 do 9 w takim układzie.

Wydaje się że łapanie ich po id nie ma specjalnie sensu. Należałoby użyć jakichś innych kryteriów do ich wyszukiwania, np ich pozycja w drzewie.

0

OK, a jest jakiś addon, który w jasny sposób pokazałby drzewa, elementy dom i ewentualnie skonstruował ścieżkę? Jak pisałem strona jest ciężka, a dev tools Edge jest do tego niezbyt wygodny by jakoś to szło. W kolejce czekają comboboxes z AriaControls :p

0
sdkjfsdkafbkh napisał(a):

OK, a jest jakiś addon, który w jasny sposób pokazałby drzewa, elementy dom i ewentualnie skonstruował ścieżkę? Jak pisałem strona jest ciężka, a dev tools Edge jest do tego niezbyt wygodny by jakoś to szło. W kolejce czekają comboboxes z AriaControls :p

No nie specjalnie masz jakieś inne wyjście niż DevTools.

Nie wiem do końca co robisz - jakiś wyciąganie dynamicznych kontrolek, na stronie której twórca jasno widać że nie chciał żeby ktoś coś ruszał; jeśli chcesz przechytrzyć autora tej strony to sam musisz być chytry.

0

Pracuję na tragicznym software, które dzięki temu, że robię inject code mogę sobie pewne rzeczy automatyzować. Problem jest głównie ze ścieżkami do elementów, bo ile ja fizycznie je widzę to kod by do nich dotrzeć jest dynamiczny czyli nie mogę iść po id, name itd. Stąd moja próba użycia np. wildcards, ale z tego co wiem QuerySelector nie obsługuje takich cudów.
Mając tyle elementów na stronie widok w dev tools oraz nazwy samych elementów, które są tasiemcami powoduje, że to wszystko jest nieczytelne i trudno mi się połapać.
Nie wspominając o nietypowych combo boxach, których lista jest ukryta więc nie można wybrać tam wartości. Aria Controls bodajże.

1 użytkowników online, w tym zalogowanych: 0, gości: 1