Zrobiłem to z BeautifulSoup, ale jest to trochę kłopotliwe i próbuję ustalić, czy mogę to zrobić bezpośrednio z Selenium.Selen: Iterowanie po grupach elementów
Powiedzmy mam następujący kod HTML, który powtarza się wielokrotnie w źródle strony z identycznych elementów, ale różnej zawartości:
<div class="person">
<div class="title">
<a href="http://www.url.com/johnsmith/">John Smith</a>
</div>
<div class="company">
<a href="http://www.url.com/company/">SalesForce</a>
</div>
</div>
muszę zbudować słownik, w którym pozycja dla każdej osoby wygląda następująco:
dict = {'name' : 'John Smith', 'company' : 'SalesForce'}
mogę łatwo dostać Selen produkować listę zawartości każdego elementu najwyższego poziomu wykonując:
driver.find_elements_by_class_name('person')
Ale nie mogę wykonać iteracji na liście, ponieważ powyższa metoda nie zawęża zakresu/źródła tylko do zawartości tego elementu.
Jeśli staram się zrobić coś takiego:
people = driver.find_elements_by_class_name('person')
for person in people:
print person.find_element_by_xpath['//div[@class="title"]//a').text
Właśnie dostać taką samą nazwę w kółko.
Potrzebuję wykonać tę grupę według grupy, ponieważ w moim przypadku powtarzanie całej strony i dołączanie każdego tagu indywidualnie nie będzie działać (jest nieskończone przewijanie, więc byłoby to naprawdę nieefektywne).
Czy ktoś wie, czy można to zrobić bezpośrednio w Selenie, a jeśli tak, to w jaki sposób?
To ma sens, a mimo to nie działa. Zobacz zaktualizowany przykładowy kod w moim PO, który, jak sądzę, jest taki sam, jak opublikowany. Powtarza tę samą nazwę (domyślam się z pierwszego obiektu na liście) w kółko. Nie wydaje się, aby zawężał zakres ... – AutomaticStatic
@AutomaticStatic Zaktualizowałem odpowiedź w skrócie po jej opublikowaniu. Wystąpił błąd (użyłem 'driver' zamiast' person' w pętli). Prosze Sprawdź ponownie. Dzięki. – alecxe
Robię dokładnie to, co napisałeś (z wyjątkiem instrukcji print, aby sprawdzić, co powraca) i wciąż wraca to samo imię w kółko. – AutomaticStatic