Как извлечь текст из div в Selenium, используя Python, когда новые div добавляются каждые 1 секунду?
Я пытаюсь извлечь контент из divs
на веб-странице с помощью Selenium. Веб-страница генерируется динамически, и каждую секунду или около того в веб-страницу вставляется новый div.
Пока у меня есть следующий код:
from selenium import webdriver
chrome_path = r"C:\scrape\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
driver.get("https://website.com/")
messages = []
for message in driver.find_elements_by_class_name('div_i_am_targeting'):
messages.append(message.text)
for x in messages:
print(x)
Который работает нормально, проблема в том, что он печатает только значения divs
на странице во время запуска я хочу непрерывно извлекать текст из the_div_i_am_targeting
и есть новые divs
появляются на странице каждую секунду или около того.
Я нашел это: Обработка динамических div-ов в селене. Это был самый близкий вопрос, который я мог найти, но он не подходит для моего вопроса, и нет ответов.
Как я могу обновить приведенный выше код так, чтобы он непрерывно печатал содержимое div на странице для выбранного мной div (в этом примере div_i_am_targeting
) в том числе новые 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