[Selenium] Szukanie elementu

[Selenium] Szukanie elementu
krysteq28
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 4 lata
  • Postów:73
0

Piszę program z selenium i próbuje znaleźć taki element na stronce

Kopiuj
<button mat-icon-button="" color="primary" type="button" class="mat-focus-indicator mat-icon-button mat-button-base mat-primary" aria-describedby="cdk-describedby-message-5" cdk-describedby-host=""><span class="mat-button-wrapper"><lp-icon icon="success" class="font-small-icon icon-success"></lp-icon></span><div matripple="" class="mat-ripple mat-button-ripple mat-button-ripple-round"></div><div class="mat-button-focus-overlay"></div></button>

szukać po xpath i css selector nie moge bo za każdym razem ten przycisk ma inny xpath i css selector ale ma zawsze taką samą klasę, dlatego napisałem

Kopiuj
driver.find_element_by_class_name("mat-focus-indicator mat-icon-button mat-button-base mat-primary").click()

ale wtedy otrzymuje błąd

Kopiuj
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".mat-focus-indicator mat-icon-button mat-button-base mat-primary"}
  (Session info: chrome=78.0.3904.108)
IK
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad rok
  • Postów:12
0

Doczytaj tutaj o waitach. https://selenium-python.readthedocs.io/waits.html
Możliwe, że szukasz elementu generowanego przez js zanim jeszcze się pojawi w DOMie.

krysteq28
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 4 lata
  • Postów:73
0
Ikszad napisał(a):

Doczytaj tutaj o waitach. https://selenium-python.readthedocs.io/waits.html
Możliwe, że szukasz elementu generowanego przez js zanim jeszcze się pojawi w DOMie.

Program wyszukuje w tym samym momencie ale po xpath tylko że xpath czasami się zmienia i wtedy wywala program, dlatego nie mogę szukać po xpath. A więc element musiał być już wczytany no bo w tym samym czasie wyszukuje po xpath i znajduje a po klasie nie znajduje. Chciałem jeszcze dodać że jak się naciśnie ten przycisk to on zmienia klase na mat-focus-indicator mat-icon-button mat-button-base mat-primary cdk-focused cdk-mouse-focused może to coś zmieni. Mam nadzieje że udało ci się coś z tego zrozumieć :)

edytowany 1x, ostatnio: krysteq28
IK
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad rok
  • Postów:12
0
Kopiuj
driver.find_element_by_xpath("//button[@class='mat-focus-indicator mat-icon-button mat-button-base mat-primary']")

Spróbuj czegoś w tym stylu. Coś mi się kojarzy, że szukanie po find_element_by_class_name nie zadziała jak jest kilka klas.

NN
NN
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 4 lata
  • Postów:239
0

A nie ma innego buttona z takimi klasami na stronie? Element musi być unikatowy. Zobacz, czy jak wyszukasz to w zawartości strony to będziesz mieć jedno wystąpienie.

krysteq28
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 4 lata
  • Postów:73
0
Ikszad napisał(a):
Kopiuj
driver.find_element_by_xpath("//button[@class='mat-focus-indicator mat-icon-button mat-button-base mat-primary']")

Spróbuj czegoś w tym stylu. Coś mi się kojarzy, że szukanie po find_element_by_class_name nie zadziała jak jest kilka klas.

Teraz program zachowuje się tak jakby po prostu omijał tą linijkę.

krysteq28
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 4 lata
  • Postów:73
0
null null napisał(a):

A nie ma innego buttona z takimi klasami na stronie? Element musi być unikatowy. Zobacz, czy jak wyszukasz to w zawartości strony to będziesz mieć jedno wystąpienie.

Jest kilka przycisków z tą klasą ale obojętne mi to w który on kliknie.

IK
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad rok
  • Postów:12
0

A dodałeś na końcu .click()?

krysteq28
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 4 lata
  • Postów:73
0
Ikszad napisał(a):

A dodałeś na końcu .click()?

O boże... racja. Ja po prostu skopiowałem i wkleiłem. Dopisuję i sprawdzam czy działa.

krysteq28
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 4 lata
  • Postów:73
0

Dzięki wam, już wszystko działa.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.