Как загружать реальные изображения вместо данных: заполнитель изображения / gif

#python #selenium #selenium-webdriver #web-scraping

#python #селен #selenium-webdriver #веб-очистка

Вопрос:

Я использую Selenium для очистки веб-сайта недвижимости. Вот ссылка — https://www.luxuryestate.com/belgium/brussels-capital-region . Я получаю фактические изображения только для первых четырех изображений, а для оставшихся одиннадцати я получаю пиксель-заполнитель, подобный data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 .

Если мы откроем эту ссылку в браузере, в ней будет всего 15 изображений. Загружается только 4 изображения. Другие изображения будут загружаться после прокрутки вниз.

Это код

 from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.expected_conditions import presence_of_element_located
import time
import sys

url = 'https://www.luxuryestate.com/belgium/brussels-capital-region'
chrome_driver_path = './chromedriver'

chrome_options = Options()
chrome_options.add_argument('--headless')
webdriver = webdriver.Chrome(
  executable_path=chrome_driver_path, options=chrome_options
)

with webdriver as driver:
    wait = WebDriverWait(driver, 10)
    driver.get(url)

    wait.until(presence_of_element_located((By.CLASS_NAME, "search-list")))
    time.sleep(3)
    container = driver.find_element_by_class_name("search-list")
    nodes = container.find_elements_by_tag_name("li")
    print(len(nodes))
    for node in nodes:
        temp = node.find_element_by_tag_name("div")
        wait.until(presence_of_element_located((By.CLASS_NAME, "loaded")))
        img = temp.find_element_by_tag_name("img")
        img_src= img.get_attribute("src")
        print(img_src)
  

Вот результат:

Пожалуйста, замените это бесполезное изображение обычным текстом

Как я могу получить фактические 15 изображений, а не заполнители?

Ответ №1:

Ответ заключается в вашем вопросе.

Другие изображения будут загружаться после прокрутки вниз.

Что вы можете сделать, так это попытаться дойти до конца страницы после начальной загрузки, используя что-то вроде следующего:

 driver.get(url)
driver.find_element_by_tag_name('html').send_keys(Keys.END)
  

И после этого увеличьте 3-секундную задержку на 5 секунд в зависимости от скорости вашего Интернета.

Вы сможете распечатать все ссылки на изображения с текущим кодом.

Я предлагаю не использовать принудительный режим ожидания потока и попробовать управлять с помощью WebDriverWait. Но это самый простой подход, основанный на ваших текущих настройках.