Как использовать Селен, чтобы сделать полный скриншот с большим количеством динамических c загрузки изображений? - PullRequest
0 голосов
/ 02 февраля 2020

Например, я хочу сделать скриншот этого , но я получаю только следующий скриншот со встроенным кодом. Что мне делать?

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

def test_fullpage_screenshot():
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--start-maximized')
    driver = webdriver.Chrome(chrome_options=chrome_options)
    driver.get("https://mp.weixin.qq.com/s/cg4qHhta8nLx93PDaW1dHQ")
    time.sleep(2)

    height = driver.execute_script("return document.body.scrollHeight")
    driver.set_window_size(1000, height)      #the trick
    driver.save_screenshot("screenshot1.png")
    driver.quit()

enter image description here

1 Ответ

1 голос
/ 03 февраля 2020

Этот сайт использует ленивую загрузку изображений. Обычно это работает, проверяя, какие изображения находятся в области просмотра. Это происходит один раз при загрузке страницы, а затем при прокрутке.

Таким образом, часть решения будет состоять в том, чтобы сделать это после установки окна просмотра:

driver.execute_script("window.scrollTo(0, 100)")

Но это не будет работать как есть, поскольку места для прокрутки нет (ваш видовой экран включает всю страницу).

Следовательно, вы можете:

  • Установить высоту области просмотра на height - 100
  • Прокрутите вниз на 100 пикселей, чтобы вызвать ленивую загрузку
  • Прокрутите назад к вершине
  • Установите высоту области просмотра на height
height = driver.execute_script("return document.body.scrollHeight")
driver.set_window_size(1000, height - 100)
driver.execute_script("window.scrollTo(0, 100)")
driver.execute_script("window.scrollTo(0, 0)")
driver.set_window_size(1000, height)
time.sleep(2) # new images need time to load
driver.save_screenshot("screenshot1.png")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...