Снимки HTML с использованием selenium webdriver?

#python #selenium-webdriver #web-crawler

#python #selenium-webdriver #веб-сканер

Вопрос:

Я пытаюсь захватить все видимое содержимое страницы в виде текста. Допустим, это один пример.

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

Есть ли способ делать снимки HTML с помощью selenium webdriver? (Желательно выражать с помощью оболочки python)

Ответ №1:

Независимо от того, сгенерирован ли HTML страницы с использованием JavaScript, вы все равно сможете захватить его с помощью driver.page_source .

Я полагаю, причина, по которой вы не смогли захватить источник раздела комментариев в вашем примере, заключается в том, что он содержится в iframe — чтобы захватить источник html для содержимого внутри фрейма / iframe, вам нужно сначала переключить фокус на этот конкретный фрейм с последующим вызовом driver.page_source .

Ответ №2:

Этот код сделает снимок экрана всей страницы:

 from selenium import webdriver

driver = webdriver.Firefox()
driver.get('https://dukescript.com/best/practices/2015/11/23/dynamic-templates.html')
driver.save_screenshot('screenshot.png')
driver.quit()
  

однако, если вам просто нужен снимок экрана определенного элемента, вы можете использовать это:

 def get_element_screenshot(element: WebElement) -> bytes:
    driver = element._parent
    ActionChains(driver).move_to_element(element).perform()  # focus
    src_base64 = driver.get_screenshot_as_base64()
    scr_png = b64decode(src_base64)
    scr_img = Image(blob=scr_png)

    x = element.location["x"]
    y = element.location["y"]
    w = element.size["width"]
    h = element.size["height"]
    scr_img.crop(
        left=math.floor(x),
        top=math.floor(y),
        width=math.ceil(w),
        height=math.ceil(h))
    return scr_img.make_blob()
  

Где WebElement — это элемент, который вы преследуете. конечно, этот метод требует, чтобы вы импортировали from base64 import b64decode и from wand.image import Image обрабатывали обрезку.

Комментарии:

1. Возможно, мой вопрос был неясен, но мне нужно захватить HTML, а не изображение

2. @LetsPlayYahtzee — Словарное определение моментального снимка — это «неофициальная фотография, сделанная быстро, обычно с помощью небольшой портативной камеры». , Пожалуйста, измените свой вопрос, чтобы отразить, что вам нужно захватить HTML, а не изображение.

3. определение @Anil_M «dictionary» также описывает его как технический удар в футболе. Итак, давайте не будем придерживаться словарных определений, потому что они могут не отражать использование термина в другом контексте. HTML snapshot — довольно точный термин, который используется для того, что я спрашиваю, я этого не делал. Посмотрите здесь , например