[Selenium] Szukanie elementu

0

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

<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

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

ale wtedy otrzymuje błąd

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)
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.

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ć :)

0
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.

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.

0
Ikszad napisał(a):
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ę.

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.

0

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

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.

0

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

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