Моя цель: На сайте AptDeco (URL в коде ниже) есть ссылки на 60 предметов мебели. Я хочу очистить все 60 из этих ссылок. Мое решение состоит в том, чтобы: (i) создать драйвер селена, (2) загрузить веб-страницу AptDeco на этот драйвер, (3) вытащить HTML-код с загруженной веб-страницы в красивый суп, (4) извлечь все ссылки HTML из красивого супа(см. код ниже)
Моя проблема: Исходный код HTML, который я загружаю в переменную с именем "html_page", включает только первые 6 предметов мебели. Я могу воссоздать проблему вручную. Если перейти к URL-адресу в браузере, щелкните правой кнопкой мыши и выберите «просмотреть исходный код страницы». Я вижу исходный код HTML, который содержит ссылки только на первые 6 элементов. Если перейти к URL-адресу в моем браузере, щелкнуть правой кнопкой мыши и выбрать «проверить», я вижу исходный код HTML, который содержит ссылки на все 60 элементов. Есть ли способ написать кусок кода, который извлекает HTML-код так, как он отображается в версии «inspect», а не в версии «view page source»? Моя гипотеза, что веб-сайт является динамическим, и есть фрагмент JavaScript, который был выполнен в версии HTML «Inspect», но не в версии «View Source Source», но я не уверен, как получить нужную версию.
Редактировать: Было отмечено, что, возможно, мне нужно было дождаться загрузки содержимого Ajax. Я запустил пару тестов после того, как загрузил URL, чтобы убедиться, что это не проблема. Сначала я проверил, был ли jQuery все еще активным (поднял Исключение, jQuery не было). Во-вторых, я проверил, что document.readyState завершен. После этих двух тестов я запустил строку кода «html_page = driver.page_source» и обнаружил, что проблема все еще остается.
from selenium import webdriver
from bs4 import BeautifulSoup
url = 'https://www.aptdeco.com/catalog'
driver = webdriver.Chrome()
driver.get(url)
html_page = driver.page_source
soup = BeautifulSoup(html_page, "html.parser")
for link in soup.findAll('a', class_='Card__CardLink-rr6223-1 crcHwb'):
print(link.get('href'))