Aktywne Wpisy
Antibambino +25
Kempes +350
Aktywne Znaleziska
Zawiera treści 18+
Ta treść została oznaczona jako materiał kontrowersyjny lub dla dorosłych.
Skopiuj link
Skopiuj linkTa treść została oznaczona jako materiał kontrowersyjny lub dla dorosłych.
Wykop.pl
Jak liczę jakieś elementy o określonej klasie to korzystam z takiego rozwiązania:
http://pastebin.com/CzMXATXi
Jak nie znajdzie określonego obiektu to wyrzuca błąd, jest break i zwraca licznik.
Teraz chciałem na podobnej zasadzie zrobić coś w tym stylu:
http://pastebin.com/FS7gx23g
Chodzi o to, że kreator ma trzy kroki i chciałem zrobić jedną funkcję klikającą 'Dalej'. Jeśli nie znajdzie odnośnika kończacego się na step1 to przechodzi do wyjątku i próbuje kliknąć na step2. Jeśli i jego nie znajdzie to w drugiej klauzuli except ma kliknąć na step3. I nie działa. Dla 'step1' poprawnie klika 'Dalej', ale gdy jest w oknie, gdzie jest link 'step2' nie zgłasza błędu, ale czeka na ten odnośnik.
Skracając pytanie. Dlaczego:
set.append(driver.findelementsbyid('przykladoweID')[i])
zwraca błąd gdy chcę dodać trzeci element o tym ID, na stronie są dwa, natomiast nie wraca błędu gdy chcę dodać pierwszy element, a na stronie nie ma żadnego (tylko czeka aż się taki pojawi)?
Ja już sobie tę kwestię rozwiązałem na około, ale mógłby ktoś wyjaśnić dlaczego Selenium/Python zachowują się inaczej w pozornie identycznych sytuacjach?
#python #selenium
@Skarfejs: Jak już pisałem - ja sobie to rozwiązanie napisałem inaczej i uzależniłem link od obecności innego obiektu na stronie. Bardziej mnie zaciekawiła ta kwestia niz szukanie alternatywnego rozwiązania, a z implicitly wait nie lubię się bawić szczególnie.
@Skarfejs: To w moim przypadku jest niemożliwe, prosty test na aplikacji do której tylko ja mam dostęp.
W sumie to chcę wykorzystać test żeby
set
to jest już funkcja w pythonie, także nazywanie tak zmiennej ją przysłania. Jesteś pewien, że chcesz robić fora do 1000, a nie po prostu przeiterować po wszystkich znalezionych elementach z określoną klasą css?
Tym bardziej że ten pierwszy kod robi mniej więcej coś takiego:
elements = driver.find_elements_by_class_name(
'ClassName'
)
return
```**```
```**```
len
```**```
(elements)
Btw: przecież ten for i tak by sie nie wykonywał tysiąc razy ale do pierwszego błędu ;-)
@venomik: no oczywiste, ale właśnie tym bardziej dlatego się tak nie robi
A co do szukania po id, to czemu masz indeks na końcu -
[0]
? Szukanie po id zwraca pierwszy znaleziony element, a nie listę.
Polecam dokumentację - http://selenium-python.readthedocs.org/en/latest/locating-elements.html