Как очистить для нескольких div, которые генерируются динамически с помощью Selenium в Python

1

Как извлечь текст из div в Selenium, используя Python, когда новые div добавляются каждые 1 секунду?

Основываясь на ответе выше, у меня есть следующий код:

from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium import webdriver

chrome_path = r"C:\scrape\chromedriver.exe"

driver = webdriver.Chrome(chrome_path)
driver.get("https://website.com/")
# Get current divs
messages = driver.find_elements_by_class_name('div_i_am_targeting')
# Print all messages
for message in messages:
    print(message.text)

while True:
    try:
        # Wait up to minute for new message to appear
        wait(driver, 60).until(lambda driver: driver.find_elements_by_class_name('div_i_am_targeting') != messages)
        # Print new message
        for message in [m.text for m in driver.find_elements_by_class_name('div_i_am_targeting') if m not in messages]:
            print(message)
        # Update list of messages
        messages = driver.find_elements_by_class_name('div_i_am_targeting')
    except:
        # Break the loop in case no new messages after minute passed
        print('No new messages')
        break

Это прекрасно работает и захватывает все div на странице по мере их появления, которые соответствуют классу, указанному в div_i_am_targeting

Div на этой HTML-странице генерируются динамически, и один div появляется примерно раз в секунду.

Фактическая структура на странице выглядит следующим образом:

<div class="div_i_am_targeting">
...
...
</div>
<div class="div_i_am_targeting">
...
...
</div>
<div class="div_i_am_targeting">
...
...
</div>
<div class="some_other_div">
...
...
</div>
<div class="div_i_am_targeting">
...
...
</div>
<div class="yet_another_div">
...
...
</div>
<div class="div_i_am_targeting">
...
...
</div>

Так, что в динамически создаваемом контенте есть другие div, появляющиеся между div, на который я сейчас нацеливаюсь.

Частота divs на странице является переменной.

Я не смог найти здесь связанных вопросов или примеров в документации.

Как я могу изменить приведенный выше код, чтобы он очищал значение более чем одного div, например, если я хочу очистить все экземпляры div_i_am_targeting и some_other_div в приведенном выше примере?

Теги:
selenium
python-2.7
selenium-chromedriver

1 ответ

0

Вы можете попытаться заменить

driver.find_elements_by_class_name('div_i_am_targeting')

с

driver.find_elements_by_css_selector('.div_i_am_targeting, .some_other_div')

в вашем скрипте, чтобы соответствовать обеим divs

  • 0
    Спасибо за предложение. Я пробовал это, но получил сообщение об ошибке: "selenium.common.exceptions.InvalidSelectorException: Сообщение: недопустимый селектор: Составные имена классов не разрешены"
  • 0
    @Gary, это потому, что вы все еще используете find_elements_by_class_name то время как вы должны использовать find_elements_by_css_selector
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню