Нужна помощь в разборе html элемента и выполнении скрипта не сработало - PullRequest
1 голос
/ 10 апреля 2019
<li tabindex="0" role="tab" aria-selected="false">
   <a href="#gift-cards" class="leftnav-links kas-leftnav-links" data-section="gift-cards" data-ajaxurl="/wallet/my_wallet.jsp">                         
   <span class="width200 kas-gift-cards-tab">Gift Cards</span>  
   <span class="count kas-count">info</span>
   </a>
</li>

У меня есть такой HTML-код, который дублируется на странице примерно 5 раз, и только 2 из этих блоков содержат информацию, которая мне нужна. Их классы одинаковы, и я не знаю, что делать. Плюс, execute_script в Firefox не работает для меня.

html_list = driver.find_element_by_id("rewards-contents")
                items = html_list.find_element_by_tag_name("li")
                for item in items:
                    text = item.text
                    print(text)

Я пытался провернуть это на питоне, но ничего толкового не вышло.

Я ожидаю, что скрипт отобразит информацию из всех 5 блоков.

Ответы [ 2 ]

2 голосов
/ 10 апреля 2019

Чтобы получить все элементы, используйте find_elements вместо find_element. Ваш код должен выглядеть так:

html_list = driver.find_element_by_id("rewards-contents")
items = html_list.find_elements_by_tag_name("li")
for item in items:
    print(item.text)

Чтобы получить текст по span элементам:

html_list = driver.find_elements_by_css_selector("#rewards-contents li")
items = html_list.find_elements_by_tag_name("span")
for item in items:
    print(item.text)
0 голосов
/ 10 апреля 2019

Спасибо @Sers за подсказку с css_selector.Я решил свою проблему следующим образом:

`info = []
time.sleep(2)
htmllist = driver.find_element_by_class_name("rewards-contents")
items = htmllist.find_elements_by_css_selector(".kas-count")
for item in items:
info.append(item.text)
print(item.text)
print(info)`
...