Wpis z mikrobloga

Cześć, staram się napisać skrypt automatyzujący wypełnianie formularzy na stronie za pomocą Pythona + Selenium. No i napotkałem problem z którym nie mogę sobie poradzić (bo żaden ze mnie programista). Mam w formularzu okienko w którym wpisuję dane kontrahenta (najczęściej nazwisko) a następnie wybieram któregoś z listy sugestii. I w żaden sposób nie potrafię za pomocą Pythona wybrać żądanego elementu. Na przykład w polu wyboru wpisuje Nowak, następnie wyskakuje mi lista:
Jan Nowak
Marek Nowak
Anna Nowak
Z tej listy chciałbym wybrać Marka Nowaka. Po zbadaniu elementu otrzymuję coś takiego:
Marek Nowak
a po skopiowaniu xpatha:
/html/body/div[1]/div/div[4]/div/div/div[2]/form/fieldset[1]/div[1]/div/span/span[2]/span[2]
No i powiedzmy że używam findelementbyxpath i podaję tego xpatha, ale wybiera mi pierwszy element z listy czyli Jana Nowaka. Nawet zmieniając indeks ostatniego span z 2 na inną wartość, cały czas wybierana zostaje pierwsza opcja. Szukając w googlach znalazłem rozwiązania typu:
find
elementbyxpath("//*[contains(.,'Marek Nowak')]")
findelementby_xpath("//*[contains(text()[2],'Marek Nowak')]")
ale nic z tego nie działa. Ma ktoś pomysł jak to rozwiązać?
#programowanie #naukaprogramowania #python
  • 12
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@morderca_mordercow: spróbuj czegoś takiego:

(/html/body/div[1]/div/div[4]/div/div/div[2]/form/fieldset[1]/div[1]/div/span/span[2]/span)[2]

i musisz się upewnić, że wykonujesz tego xpatha po załadowaniu tej listy. Zakładam, że tak jest :)
  • Odpowiedz
@morderca_mordercow: to znaczy, że Twoj xpath(sciezka do elementu) moze sie zmieniać w zależności od przeładowania strony lub jest po prostu jest nieprawidłowy. Xpatha mozesz latwo sprawdzić w inskeptorze przeglądarki(F12). Następnie CTRL + F na źródle strony i wklejasz swoj xpath w pole wyszukiwania. Jak znajdzie ten element, który oczekujesz to znaczy, że jest prawidłowy. Jeśli chodzi o wyszukiwanie xpathów to polecam dodatek do przeglądarek o nazwie ChroPath. Jak dopiero zaczynasz
  • Odpowiedz
@morderca_mordercow: Element ma ustawiony "display: none", a to oznacza, że nie ma go aktualnie wyświetlonego na stronie, a jeśli go nie ma na stronie to go nie naciśniesz. Musisz doprowadzić do stanu, w którym element pojawia się na stronie, wtedy go wyszukać i nacisnąć
  • Odpowiedz
@xulek: w momencie robienia ssa akurat lista była niewidoczna, ale w czasie jak chcę wybrać to jest display: block;
Dodatkowo zauważyłem że używając np xpatha wybiera mi pierwszy element z listy ponieważ ten element jest podświetlony. Gdy myszką ręcznie przejadę na inny element to wtedy zostanie wybrany ten który jest podświetlony, więc może trzeba to jakoś po prostu obejść jakimś brutal forcem, żeby np na stronie lokalizowało szukany tekst i
morderca_mordercow - @xulek: w momencie robienia ssa akurat lista była niewidoczna, a...

źródło: comment_1590338158c5cun4vGnVQUeJo75cFLFn.jpg

Pobierz
  • Odpowiedz
@morderca_mordercow: Spróbuj zrobić coś takiego(przykład na podstawie google.pl):
from selenium import webdriver

from selenium.webdriver.support import expectedconditions as EC
from selenium.webdriver.common.by import By
from
  • Odpowiedz