Pobierz stronę z Selenium, ale poczekaj, aż nieznana wartość elementu nie będzie pusta
Kontekst
To jest ponowna publikacja Pobierz stronę z Selenium, ale poczekaj, aż wartość elementu nie będzie pusta , która została zamknięta bez żadnej ważności, o ile wiem.
Połączone odpowiedzi w rozumowaniu końcowym opierają się na wiedzy, jaka będzie oczekiwana wartość tekstowa. W każdej odpowiedzi wyraźnie pokazuje oczekiwany tekst zakodowany na stałe w WebDriverWait
wywołaniu. Co więcej, żadna z połączonych odpowiedzi nie dotyka nawet w oddali ostatniej części mojego pytania:
[czy oczekiwane warunki] pojawiają się przed lub po stronie Get
Pytania „zduplikowane”
- Jak wyodrębnić dane z poniższego html?
- Potwierdź, jeśli tekst w elemencie zawiera określony tekst częściowy
Oryginalne pytanie
Chwytam stronę internetową przy użyciu Selenium, ale muszę poczekać, aż załaduje się określona wartość. Nie wiem, jaka będzie wartość, tylko w jakim elemencie będzie obecna.
Wygląda na to, że korzystam z oczekiwanego warunku text_to_be_present_in_element_value
lub text_to_be_present_in_element
jest najbardziej prawdopodobnym rozwiązaniem, ale mam trudności ze znalezieniem jakiejkolwiek faktycznej dokumentacji na temat ich używania i nie wiem, czy pojawią się przed, czy po stronie Pobierz:
webdriver.get(url)
Omow wszystko jeszcze raz
Jak uzyskać stronę za pomocą Selenium, ale poczekać, aż nieznana wartość tekstowa wypełni tekst lub wartość elementu przed kontynuowaniem?
Odpowiedzi
Jestem pewien, że moja odpowiedź nie jest najlepsza, ale oto część mojego własnego kodu, która pomogła mi w podobnym zadaniu.
W moim przypadku miałem problem z czasem ładowania DOM. Czasami zajmowało to 5 sekund, czasami 1 sekundę i tak dalej.
url = 'www.somesite.com'
browser.get(url)
Ponieważ w moim przypadku browser.implicitly_wait(7)
nie wystarczyło. Zrobiłem proste for loop
sprawdzenie, czy zawartość jest załadowana.
some code...
for try_html in range(7):
""" Make 7 tries to check if the element is loaded """
browser.implicitly_wait(7)
html = browser.page_source
soup = BeautifulSoup(html, 'lxml')
raw_data = soup.find_all('script', type='application/ld+json')
"""if SKU in not found in the html page we skip
for another loop, else we break the
tryes and scrape the page"""
if 'sku' not in html:
continue
else:
scrape(raw_data)
break
To nie jest idealne, ale możesz spróbować.